J2EE与WebLogic服务器课程代码实战

打印 上一主题 下一主题

主题 1776|帖子 1776|积分 5328

本文还有配套的精品资源,点击获取  

  简介:J2EE(Java 2 Platform, Enterprise Edition)是一种用于构建企业级分布式应用的框架,由Sun Microsystems推出,提供丰富的API和服务,支持多层架构。在本课程中,将深入探讨如安在Oracle的WebLogic Server上部署和运行J2EE应用步调。课程内容包括Servlet、JSP、EJB、JMS、JTA等关键组件的代码实现以及WebLogic Server的管理,旨在资助学习者掌握J2EE开发和WebLogic服务器使用,提升企业级应用开发技能。

1. J2EE框架简介

1.1 J2EE的界说及其紧张性

  Java 2 Platform Enterprise Edition(J2EE),现称为Java Platform, Enterprise Edition(Java EE),是一种用于开发企业级应用步调的平台。它提供了一套完整的开发、运行和管理企业应用步调所需的规范和API聚集。J2EE的强大之处在于其可以或许资助开发者构建可伸缩、多层式和安全的应用步调,同时提供了组件模型和容器的概念,使开发者可以专注于业务逻辑的实现,而不必担心底层的技术细节。
  J2EE平台的技术组件覆盖了从表示层到业务层再到数据持久层的整个应用步调体系结构,包括Servlet、JavaServer Pages (JSP)、Enterprise JavaBeans (EJB)、Java Message Service (JMS)、Java Transaction API (JTA)等关键技术和规范。这些组件共同支持了各种企业级应用的开发和部署,如电子商务、网上银行、供应链管理等。
1.2 J2EE的核心技术

  J2EE的核心技术主要包括以下几个方面:


  •    Servlet: 是Java平台的一种服务端步调,主要用于扩展服务器的功能,处理客户端请求并返反相应。Servlets 提供了一种基于组件的、平台独立的方法来构建动态Web应用步调。
  •    JavaServer Pages (JSP): 是一种动态页面技术,允许开发者将Java代码嵌入到HTML页面中。这使得页面计划者无需深入理解Java编程,就能在页面中使用Java来创建动态内容。
  •    Enterprise JavaBeans (EJB): 开发者提供了一种在分布式对象情况下开发和部署企业级应用步调的方式。EJB封装了业务逻辑,简化了开发和部署过程,并支持事务管理和安全控制。
  •    Java Message Service (JMS): 提供了创建、发送、吸收和读取消息的标准API。它支持异步通信,使得差别的应用步调组件可以进行独立操作。
  •    Java Transaction API (JTA): 提供了一种标准的接口,用于管理事务,即一系列必须全部完成或完全不做的操作。这在数据库和企业信息体系中尤为紧张,以确保数据的一致性和完整性。
  以上这些组件和规范,不仅构成了J2EE平台的核心,也为现代Web开发提供了坚实的基础。接下来的章节中,我们将深入探讨这些技术在WebLogic Server中的应用和实现方式。
2. WebLogic Server概述

2.1 WebLogic Server的基本概念

2.1.1 WebLogic Server的界说和特性

  WebLogic Server是Oracle公司开发的一款应用服务器,是用于部署Java企业版(Java EE)应用步调的全功能中间件平台。它实现了Java EE规范,提供了企业级应用运行情况,支持EJB、JMS、JPA等多种技术,并具备集群、负载均衡、高可用性和安全性等关键特性。
  WebLogic的一个紧张特性是其灵活的扩展性。企业可以根据需要选择差别的WebLogic产品和许可证,以满足从单个服务器到跨多个数据中心的大型企业级部署。WebLogic还提供了一个集成开发情况WebLogic Workshop,使得开发者可以或许用JSP、Servlets、EJB、Web Services等多种技术快速开发和部署Java EE应用步调。
  另一个明显特点是对集群技术的支持,这使得WebLogic可以或许处理大规模的并发请求,并确保应用的高可用性和负载均衡。此外,WebLogic的管理控制台和下令行工具WebLogic Scripting Tool (WLST) 支持应用的无缝部署、监控和故障排除。
2.1.2 WebLogic Server的体系架构

  WebLogic的体系结构包括以下几个核心组件:


  • 服务器实例(Server Instance) :这是WebLogic的核心,负责处理请求并运行应用步调。每个服务器实例都可以配置为域中的一个节点。
  • 域(Domain) :域是WebLogic服务器实例、部署的应用步调和服务的逻辑分组。它为一组服务器实例提供了共享配置。
  • 管理服务器(Administration Server) :管理服务器负责管理整个域的配置,并且是域中唯一可以启动和停止其他服务器实例的节点。
  • 托管服务器(Managed Servers) :托管服务器承载应用步调和服务,它们由管理服务器进行管理。
  • 集群(Cluster) :集群是多个托管服务器的组合,它们在外部呈现为单一的逻辑服务器,并提供高可用性和负载均衡。
  此外,WebLogic还提供了多种服务组件,比如JDBC连接池、JMS服务、Web服务等,这些服务都集成在体系结构中,用于支持应用步调的运行。
2.2 WebLogic Server的安装与配置

2.2.1 体系要求和安装步骤

  WebLogic Server支持的操作体系包括Linux、Windows和各种UNIX体系。在安装之前,需要满足肯定的硬件和软件要求,比如内存、CPU和磁盘空间等。官方通常会提供保举的最小体系配置以及在差别操作体系上的安装分析。
  安装WebLogic Server大要分为以下几个步骤:

  • 下载安装文件 :从Oracle官网下载WebLogic Server安装包。
  • 检查体系要求 :确保体系满足安装WebLogic的软硬件要求。
  • 运行安装步调 :根据操作体系选择安装步调并按照指示实验。
  • 配置域情况 :安装步调会引导用户配置管理服务器域和初始服务器实例。
  在安装过程中,需要指定JDK的位置,因为WebLogic Server需要JDK来运行。安装完毕后,可以启动WebLogic的管理控制台来检查安装是否乐成,并进行初步配置。
2.2.2 配置管理工具和域名的创建

  WebLogic的配置管理工具是WebLogic Server的图形用户界面,通过它可以方便地进行服务器实例和应用步调的配置。管理工具包括一个基于Web的应用步调,可以通过欣赏器访问。
  创建域名是一个关键步骤,因为这是WebLogic部署和管理应用步调的基础。创建域名时,可以指定域的名称、位置以及要运行在域中的应用步调和服务。域配置文件包含了管理域的设置信息,如服务器配置、应用步调部署信息以及安全设置等。
  创建域名后,用户需要配置服务器实例,包括为托管服务器指定集群、设置JMS服务以及其他必要的服务。管理服务器和托管服务器之间的通信是通过内部的网络协议来完成的,确保了分布式应用的管理。
2.3 WebLogic Server的安全机制

2.3.1 用户认证和授权机制

  WebLogic Server使用了一套综合的安全机制来保护运行在其上的企业应用。起首,它提供了多样的用户认证方法,包括基本认证、表单认证、摘要认证等,企业可以基于需求选择适合的认证方式。WebLogic还支持与外部安全体系如LDAP或Active Directory进行集成。
  授权是通过脚色和策略来管理用户对资源的访问权限。用户被分配到一个或多个脚色,每个脚色对应一组权限,而权限则是对WebLogic域中的特定资源(如Web应用、EJB等)进行操作的本领。WebLogic Server使用安全策略文件来界说这些脚色和权限,管理员可以使用管理工具来配置这些安全设置。
2.3.2 安全范畴和SSL配置

  为了进一步增强安全性,WebLogic Server提供了安全范畴(Security Realms)的概念。安全范畴是安全数据和安全服务的逻辑分组,它允许管理员对差别的服务组件界说差别的认证和授权策略。WebLogic提供了多种安全范畴范例,如基本范畴、XACML范畴、自界说范畴等。
  SSL配置是保证数据传输安全的关键步骤。通过配置SSL,可以启用HTTPS协议来加密客户端和服务器之间的数据传输。SSL配置包括创建密钥库、天生数字证书以及配置WebLogic来使用这些证书。WebLogic提供了一个向导来简化SSL配置的过程,确保了整个过程的简便性和可管理性。
3. Servlet在WebLogic中的应用与代码实现

3.1 Servlet技术基础

3.1.1 Servlet的概念和生命周期

  Servlet是一种运行在服务器端的小型Java步调,主要功能是为客户端请求天生相应。它是Java EE中用于扩展服务器功能的组件之一,可以或许处理客户端发出的HTTP请求并返反相应。Servlet接口界说了Java Web服务器与Servlet之间的左券,Web容器负责实例化Servlet、调用其生命周期方法。
  Servlet的生命周期包括以下三个基本阶段:加载和实例化、初始化、服务、烧毁。加载和实例化通常由Web容器完成,它会根据部署描述符(web.xml)或注解创建Servlet实例。初始化阶段Web容器会调用  init()  方法,传入一个ServletConfig对象,该对象包含Servlet配置信息。服务阶段,Web容器通过调用  service()  方法来处理来自客户端的请求。末了,在Web容器卸载Servlet时,会调用  destroy()  方法进行清算工作。
3.1.2 Servlet的接口和类结构

  Servlet接口位于  javax.servlet  包中,它界说了生命周期方法  init()  ,  service()  , 和  destroy()  。为了使用Servlet,开发者需要扩展  GenericServlet  或  HttpServlet  类。  GenericServlet  是一个抽象类,提供了Servlet接口的通用实现;而  HttpServlet  是  GenericServlet  的子类,专门用于处理HTTP请求。


  •   init(ServletConfig config)  : 在Servlet初始化时由Web容器调用。
  •   service(ServletRequest req, ServletResponse res)  : 处理客户端请求,区分差别的请求范例(GET, POST等)。
  •   destroy()  : 在Servlet烧毁前由Web容器调用。
  当开发者实现自己的Servlet时,通常会扩展  HttpServlet  类并重写  doGet()  ,  doPost()  , 等方法来处理具体请求。
3.2 Servlet在WebLogic中的部署

3.2.1 创建和配置Servlet项目

  在WebLogic Server中部署Servlet,起首需要创建一个标准的Java Web项目,并将Servlet类添加到项目中。然后,需要在项目的  WEB-INF  目录下创建或编辑  web.xml  文件,以配置Servlet。
  以下是一个简单的  web.xml  示例,配置了一个Servlet:
  1. <web-app>
  2.     <servlet>
  3.         <servlet-name>MyServlet</servlet-name>
  4.         <servlet-class>com.example.MyServlet</servlet-class>
  5.     </servlet>
  6.     <servlet-mapping>
  7.         <servlet-name>MyServlet</servlet-name>
  8.         <url-pattern>/myservlet</url-pattern>
  9.     </servlet-mapping>
  10. </web-app>
复制代码
在这个配置中,  <servlet>  元素界说了Servlet的名称和类名,而  <servlet-mapping>  元素界说了Servlet应当相应的URL模式。
3.2.2 部署Servlet到WebLogic

  部署到WebLogic Server需要以下步骤:

  • 构建项目并打包成WAR文件。
  • 登录到WebLogic的管理控制台。
  • 在控制台中选择“部署”选项。
  • 上传并部署WAR文件到指定的服务器或集群。
  • 配置必要的数据源或情况参数(如需要)。
  WebLogic提供了一个热部署机制,允许在不重启服务器的情况下部署新的应用。
3.3 Servlet编程实战

3.3.1 请求和相应处理

  在Servlet中处理客户端请求通常涉及到读取请求参数、处理业务逻辑和构造相应。Servlet API提供了  HttpServletRequest  和  HttpServletResponse  两个对象来分别处理请求和相应。
  示例代码展示了如何从请求中获取参数:
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2.     String param = request.getParameter("paramName");
  3.     // 处理param
  4.     response.setContentType("text/html");
  5.     PrintWriter out = response.getWriter();
  6.     out.println("<html><body>");
  7.     out.println("<h1>Parameter value: " + param + "</h1>");
  8.     out.println("</body></html>");
  9. }
复制代码
在这个  doGet  方法中,通过调用  getParameter()  方法获取了名为  paramName  的请求参数,并将其写入相应。
3.3.2 会话跟踪和线程安全

  Servlet可以利用HTTP会话跟踪机制来维持用户状态。会话(  HttpSession  对象)可以存储用户特定的数据,并在整个用户的请求-相应周期中保持有效。
  1. HttpSession session = request.getSession(true);
  2. session.setAttribute("sessionAttribute", "sessionValue");
复制代码
Servlet开发者需要留意的另一个问题是线程安全。由于Servlet容器可能会为多个请求创建同一个Servlet实例的多个线程,因此开发者需要确保Servlet内部的数据结构是线程安全的。一种常见的做法是尽量不使用实例变量来存储请求数据,而是将数据存储在请求或会话中。
   留意: 本章节介绍的Servlet技术是Java Web应用开发的核心组件之一,它的应用广泛,对于理解Java EE架构非常紧张。在WebLogic Server中部署和使用Servlet,可以或许资助开发者构建稳定和可扩展的企业级Web应用。上述内容提供了对Servlet基础概念、生命周期、接口和类结构的介绍,以及在WebLogic中的部署和编程实践,这些都是掌握Servlet技术的必要步骤。在企业实际开发过程中,公道利用Servlet API提供的功能,结合WebLogic Server提供的高性能和管理本领,可以或许有效地提高开发服从和应用性能。
4. JSP在WebLogic中的应用与代码实现

  JSP(JavaServer Pages)是Sun公司推出的一种动态网页技术标准。它允许开发者将Java代码嵌入到HTML页面中,这样使得网页开发者无需掌握复杂的编程知识就能实现动态内容的天生。在WebLogic Server平台上,JSP可以很好地与Servlet和其他技术相结合,从而构建出功能强大的Web应用步调。
4.1 JSP技术概述

4.1.1 JSP的界说和基本结构

  JSP页面本质上是一个文本文件,可以包含HTML标记、JSP元素以及其他文本内容。JSP页面被Web服务器处理后,天生的是一般的HTML页面,客户端可以正常地使用欣赏器进行查看。JSP页面的扩展名通常为.jsp。
  JSP的页面内容由以下几个部门构成: - 平凡HTML代码 - JSP指令(例如  <%@ page ... %>  ) - 脚本声明(例如  <%! ... %>  ) - 脚本表达式(例如  <%= ... %>  ) - 脚本片断(例如  <% ... %>  )
4.1.2 JSP的脚本元素和指令

  JSP页面中的脚本元素主要包含三种范例:声明、表达式和脚本段。


  • 声明 :用于界说可以在后续Java代码中使用的变量或方法。
  • 表达式 :用于输出信息到客户端,表达式的内容会被转换为字符串并发送到客户端。
  • 脚本段 :可以包含任何可以出如今Java方法中的代码段。
  而JSP指令用于设置与整个JSP页面相关的属性,主要包含三种指令: - page指令 :用于界说页面依赖属性,比如缓冲要求、错误页面、内容范例等。 - include指令 :用于在当前页面中包含其他页面的内容。 - taglib指令 :用于界说和引入自界说标签库。
4.2 JSP在WebLogic中的部署

4.2.1 JSP文件的编写和编译

  创建一个JSP文件的过程非常简单。起首,你需要在你的WebLogic应用目录中创建一个新的JSP文件。例如,创建一个名为  example.jsp  的文件。
  接下来,我们将在JSP中使用脚本元素来输出一些动态内容。假设我们想要输出当前服务器的时间:
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>Current Server Time</title>
  5. </head>
  6. <body>
  7.     <h2>Server Time is: <%= new java.util.Date() %></h2>
  8. </body>
  9. </html>
复制代码
在这个例子中,我们使用了  <%@ page ... %>  指令来设置页面的MIME范例和编码方式,以及  <%= ... %>  脚本表达式来输出当前时间。
4.2.2 JSP页面的部署和调试

  部署JSP页面到WebLogic Server,只需要将其放置在应用的正确目录下,例如  webapps/yourApp/  目录。WebLogic在吸收到第一次请求时会自动编译JSP页面。可以通过查看WebLogic的日志文件来观察页面编译的情况,这有助于调试。
  WebLogic也提供了管理控制台来资助开发者管理部署的Web应用。在这个控制台中,你可以查看服务器状态、监控应用性能、配置安全设置,甚至可以直接访问部署的JSP页面进行测试。
4.3 JSP高级应用

4.3.1 自界说标签库的使用

  自界说标签库允许开发者创建可重用的组件,这些组件封装了常见的功能,可以像使用HTML标签那样在JSP页面中使用。通过使用标签库描述符(TLD)文件来界说这些自界说标签。
  例如,创建一个简单的自界说标签  helloTag  ,它在页面上显示一条消息:
  1. <%@ taglib prefix="mytags" uri="/WEB-INF/mytags.tld" %>
  2. <mytags:helloTag message="Hello World!" />
复制代码
对应的  mytags.tld  文件内容如下:
  1. <taglib>
  2.     <tlib-version>1.0</tlib-version>
  3.     <short-name>My Tags</short-name>
  4.     <uri>***</uri>
  5.     <tag>
  6.         <name>helloTag</name>
  7.         <tag-class>com.example.tags.HelloTag</tag-class>
  8.         <body-content>empty</body-content>
  9.         <attribute>
  10.             <name>message</name>
  11.             <required>true</required>
  12.         </attribute>
  13.     </tag>
  14. </taglib>
复制代码
在这个例子中,我们界说了一个名为  helloTag  的标签,它有一个必需的属性  message  。  tag-class  指定了处理这个标签的Java类。
4.3.2 JSP和Servlet的协作机制

  JSP和Servlet在Web应用步调中经常协同工作。Servlet通常用于处理业务逻辑和数据处理,而JSP主要用于天生HTML页面。
  下面是一个简单的例子来展示如安在JSP中调用Servlet:
  在Servlet中,我们将数据存储在request对象中:
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2.     request.setAttribute("message", "Data from Servlet");
  3.     request.getRequestDispatcher("/WEB-INF/showMessage.jsp").forward(request, response);
  4. }
复制代码
在JSP页面  showMessage.jsp  中,我们读取并显示从Servlet传递来的数据:
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>Message from Servlet</title>
  5. </head>
  6. <body>
  7.     <h2><%= request.getAttribute("message") %></h2>
  8. </body>
  9. </html>
复制代码
在这个例子中,我们使用了  request.setAttribute  方法在Servlet中传递数据,然后在JSP页面中使用  request.getAttribute  方法获取并显示这个数据。
  通过这些高级应用,JSP不仅可以单独使用,还可以与Servlet紧密结合,实现动态内容的天生和业务逻辑处理,大大提高了Web应用步调的开发服从和可维护性。
5. EJB在WebLogic中的应用与代码实现

5.1 EJB技术详解

5.1.1 EJB的组件模型和范例

  企业JavaBean(EJB)是一种服务器端组件架构,用于开发基于Java EE平台的企业级应用。它将业务逻辑封装在可重用、可部署的组件中,使得开发者可以或许专注于业务逻辑而不是底层体系实现。
  EJB的组件模型通常分为三种范例:会话Bean、消息驱动Bean和实体Bean。会话Bean用于处理客户端请求,分为有状态(Stateful)和无状态(Stateless)两种。无状态会话Bean不生存客户端的状态信息,而有状态会话Bean则会生存。消息驱动Bean则是一种异步处理消息的组件,通常用于实现消息队列的消耗者。
  实体Bean代表了数据库中的数据模型,它可以是容器管理持久性(Container-Managed Persistence, CMP)或bean管理持久性(Bean-Managed Persistence, BMP)。CMP实体Bean的持久化逻辑由EJB容器管理,而BMP实体Bean则由开发者自己管理。
5.1.2 EJB的生命周期和事务管理

  EJB组件的生命周期是由容器自动管理的,容器负责创建和烧毁EJB实例,以及管理实例的状态。EJB的生命周期管理包括实例的创建、业务方法的调用、状态管理以及实例的烧毁。
  事务管理是EJB中非常紧张的一个方面,它确保了一组操作要么全部乐成,要么全部回滚,以保持数据的一致性。EJB通过声明式事务属性来管理事务界限,开发者可以在部署描述符中或通过注解指定事务属性,如  Required  、  RequiresNew  、  NotSupported  等。
5.2 EJB在WebLogic中的部署和使用

5.2.1 开发和配置EJB组件

  在WebLogic中开发EJB通常需要使用EJB 3.0规范,这简化了EJB的开发。起首,开发者需要创建一个EJB模块,通常是一个JAR文件,并在其中界说EJB类。EJB类中的业务方法需要遵循特定的命名约定并使用特定的注解,如  @Stateless  、  @Stateful  或  @Entity  。
  接下来,需要在  weblogic-ejb-jar.xml  部署描述符中配置EJB的属性,大概使用注解来设置特定的部署属性。这些属性可能包括安全性、事务管理等。
  1. @Stateless
  2. public class MyEJB {
  3.     @Resource
  4.     private SessionContext context;
  5.     @TransactionAttribute(TransactionAttributeType.REQUIRED)
  6.     public void someMethod() {
  7.         // business logic here
  8.     }
  9. }
复制代码
在上面的代码中,  @Stateless  注解表明这是一个无状态会话Bean。  @Resource  用于注入一个  SessionContext  ,它可以用于访问当前调用的情况信息。  @TransactionAttribute  注解用于声明方法的事务属性。
5.2.2 企业JavaBean的集成和调用

  EJB在WebLogic中的集成和调用涉及几个步骤。起首,在WebLogic中部署包含EJB组件的模块。其次,通过远程或本地接口调用EJB组件提供的业务方法。
  EJB的集成可以通过EJB客户端API大概依赖注入的方式进行。在客户端代码中,通常需要创建一个初始上下文(InitialContext)并查找EJB组件:
  1. InitialContext ic = new InitialContext();
  2. MyEJB myEJB = (MyEJB) ic.lookup("MyEJBRemote");
  3. myEJB.someMethod();
复制代码
在这里,  MyEJBRemote  是EJB的远程接口。通过查找这个接口,客户端可以调用EJB组件提供的方法。
5.3 EJB项目实战

5.3.1 实体Bean的创建和应用

  实体Bean代表了持久化的数据。创建实体Bean通常需要界说实体类,并使用注解如  @Entity  来标注。实体类需要包含与数据库表对应的字段和映射关系。
  1. @Entity
  2. @Table(name = "my_table")
  3. public class MyEntityBean implements Serializable {
  4.     @Id
  5.     @GeneratedValue(strategy = GenerationType.IDENTITY)
  6.     private Long id;
  7.     // Other fields, getters, setters, and methods
  8. }
复制代码
在上面的例子中,  @Entity  注解表明这是一个实体类。  @Table  注解将实体类映射到数据库的  my_table  表。  @Id  注解界说了主键字段,并且使用  @GeneratedValue  指定了主键的天生策略。
  实体Bean的创建还涉及到容器管理持久性(CMP)或Bean管理持久性(BMP)。在CMP中,容器负责所有数据库操作的细节,而BMP则需要开发者自行编写数据访问逻辑。
5.3.2 会话Bean的开发和事务处理

  会话Bean分为有状态和无状态两种。无状态会话Bean没有会话状态,这意味着每个方法调用都是独立的。无状态会话Bean适合于那些不需要跟踪客户端状态的业务逻辑。有状态会话Bean则生存会话状态,适用于需要跟踪客户端状态的业务逻辑。
  1. @Stateful
  2. public class MyStatefulEJB {
  3.     private String state;
  4.     @TransactionAttribute(TransactionAttributeType.REQUIRED)
  5.     public void setState(String newState) {
  6.         this.state = newState;
  7.     }
  8.     @TransactionAttribute(TransactionAttributeType.REQUIRED)
  9.     public String getState() {
  10.         return state;
  11.     }
  12. }
复制代码
在事务处理方面,  @TransactionAttribute  注解用于指定方法的事务属性。  TransactionAttributeType.REQUIRED  表示假如当前调用处于一个事务中,那么新方法将在这个事务中运行。假如当前调用不在事务中,容器将自动启动一个新的事务。
  会话Bean中的事务处理通常涉及多个操作,这些操作要么全部乐成,要么在出现非常时全部回滚。通过正确配置事务属性,开发者可以确保数据的一致性和完整性。
6. JMS在WebLogic中的应用与配置

6.1 JMS技术基础

6.1.1 JMS的架构和消息模型

  Java消息服务(JMS)是一种消息服务规范,用于在两个或多个应用步调之间,或分布式体系中发送消息,进行异步通信。JMS提供了一组API来创建、发送、吸收和读取消息。它允许应用步调组件通过消息传递互换信息,这些组件被称为消息生产者和消息消耗者。
  JMS提供了两种消息模型:点对点模型(P2P)和发布/订阅模型(Pub/Sub)。


  • 点对点模型 :在此模型中,消息生产者发送消息到一个特定的队列中,消息消耗者从这个队列中吸收消息。生产者和消耗者之间的通信是一对一的。此模型类似于实际生活中的邮件服务,用户发送邮件后,吸收者按照邮件到达的顺序逐一处理邮件。
  1. flowchart LR
  2.     P[消息生产者] -->|发送| Q[队列]
  3.     Q -->|接收| C[消息消费者]
复制代码


  • 发布/订阅模型 :在此模型中,消息被发布到一个主题中,任何订阅了该主题的消耗者都可以吸收到消息。这种模型允许一对多的通信。这类似于实际生活中的报纸订阅服务,一个报纸编辑部发布报纸,多个订阅者可以读取同一份报纸。
  1. flowchart LR
  2.     P[消息发布者] -->|发布| T[主题]
  3.     T -->|订阅| C1[消息消费者1]
  4.     T -->|订阅| C2[消息消费者2]
复制代码
这两种模型各自有其适用场景,开发者可以根据需求选择适合的模型。
6.1.2 JMS编程接口和消息范例

  JMS API界说了一组用于创建、发送、吸收和读取消息的接口。这些接口按照功能可以分为以下几类:


  • 连接工厂 :用于创建连接的工厂对象。
  • 目的地 :用于界说消息发送和吸收位置的对象,如队列和主题。
  • 连接 :代表应用步调和JMS服务提供者之间的连接。
  • 会话 :是发送和吸收消息的线程上下文。
  • 消息生产者 :用于发送消息的对象。
  • 消息消耗者 :用于吸收消息的对象。
  • 消息 :消息是包含数据的对象,由消息头、属性和消息体构成。
  JMS界说了以下几种消息范例:


  • TextMessage :包含一个字符串的消息。
  • ObjectMessage :包含一个可序列化的Java对象的消息。
  • BytesMessage :包含一个字节数组的消息。
  • StreamMessage :包含一系列原始值的消息。
  • MapMessage :包含一套名值对的消息。
  每种消息范例都有其特定的应用场景,开发者应根据需要选择适合的消息范例。
6.2 JMS在WebLogic中的实践

6.2.1 配置和管理JMS资源

  在WebLogic中配置JMS资源涉及创建JMS模块、服务器和目的地资源。以下是一个基本的JMS资源配置流程:

  • 登录到WebLogic管理控制台。
  • 在左侧导航栏中,选择  Services  >  JMS  。
  • 点击  Connection Factories  来创建连接工厂。
  • 点击  Destinations  来创建队列或主题。
  • 选择相应的模块,并根据需要配置属性。
  配置完成后,可以使用WebLogic提供的管理API来动态管理这些资源,大概通过管理控制台进行配置。
6.2.2 创建消息生产者和消耗者

  开发人员在编写JMS代码时,起首需要创建会话对象,然后基于该会话创建消息生产者和消耗者。以下是创建消息生产者和消耗者的示例代码:
  1. // 创建连接工厂对象
  2. ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("ConnectionFactory");
  3. // 创建连接
  4. Connection connection = connectionFactory.createConnection();
  5. // 创建会话
  6. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  7. // 创建目的地对象
  8. Destination destination = (Destination) new InitialContext().lookup("testQueue");
  9. // 创建消息生产者
  10. MessageProducer producer = session.createProducer(destination);
  11. // 创建消息消费者
  12. MessageConsumer consumer = session.createConsumer(destination);
  13. // 发送消息
  14. TextMessage message = session.createTextMessage("Hello JMS!");
  15. producer.send(message);
  16. // 接收消息
  17. Message receivedMessage = consumer.receive();
  18. if (receivedMessage instanceof TextMessage) {
  19.     TextMessage textMessage = (TextMessage) receivedMessage;
  20.     System.out.println("Received: " + textMessage.getText());
  21. }
  22. // 关闭连接
  23. connection.close();
复制代码
在此代码中,我们创建了一个文本消息并将其发送到队列中,然后创建了消息消耗者以吸收来自同一队列的消息。需要留意的是,消息的发送和吸收需要在事务上下文中进行,以确保消息的一致性。
6.3 JMS高级特性应用

6.3.1 消息持久化和消息驱动Bean

   消息持久化 是JMS提供的一个功能,允许消息在生产者发送消息后,即使服务器崩溃,消息也不会丢失。这意味着消息会生存在服务器上,直到被乐成消耗。在创建消息生产者时,可以指定消息持久化策略:
  1. // 创建持久化消息生产者
  2. MessageProducer producer = session.createProducer(destination);
  3. producer.setDeliveryMode(DeliveryMode.PERSISTENT);
复制代码
消息驱动Bean(MDB) 是企业级JavaBean,专门用于处理JMS消息。MDB不需要吸收者主动调用,而是由容器在消息到达目的地时调用。这使得消息处理更加自动化和解耦。以下是一个简单的MDB示例:
  1. @MessageDriven(activationConfig = {
  2.     @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
  3.     @ActivationConfigProperty(propertyName = "destination", propertyValue = "testQueue")
  4. })
  5. public class MyMessageBean implements MessageListener {
  6.     public void onMessage(Message message) {
  7.         if (message instanceof TextMessage) {
  8.             try {
  9.                 System.out.println("Received: " + ((TextMessage) message).getText());
  10.             } catch (JMSException e) {
  11.                 e.printStackTrace();
  12.             }
  13.         }
  14.     }
  15. }
复制代码
在这个例子中,当消息到达名为  testQueue  的队列时,  MyMessageBean  的  onMessage  方法会被自动调用。
6.3.2 JMS与EJB的集成应用案例

  JMS与EJB的集成可以构建出非常灵活的业务流程和通信模式。例如,一个订单处理体系可能会使用EJB来处理订单逻辑,而使用JMS来处理订单状态更新关照。在这种情况下,实体Bean可以用来存储订单数据,而会话Bean可以用来处理业务逻辑。当订单状态发生变革时,会话Bean可以发送一个消息到JMS队列中,其他的体系组件订阅该队列并相应这些状态变革。
  1. // 在会话Bean中发送订单状态更新消息
  2. MessageProducer producer = session.createProducer(destination);
  3. TextMessage message = session.createTextMessage("Order status updated: " + orderId);
  4. producer.send(message);
复制代码
然后,其他体系组件(可能是另一个EJB,大概一个独立的应用步调)可以订阅并监听该队列,当吸收到更新消息时实验相应的操作。
  这种集成允许业务逻辑的差别部门独立于JMS消息传递机制,也使得体系组件之间可以通过异步消息进行松耦合通信。通过这种集成,开发人员可以或许构建出更为强大和灵活的分布式应用。
7. JTA在WebLogic中的事务处理

7.1 JTA事务管理概念

7.1.1 事务的基本原则和属性

  事务是数据库操作中的一个逻辑单位,由一系列操作构成,这些操作要么全部乐成,要么全部失败。在JTA(Java Transaction API)中,事务遵循ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。


  • 原子性 指事务是不可分割的工作单位,事务中的操作要么全部完成,要么全部不完成。
  • 一致性 指事务必须使数据库从一个一致性状态转换到另一个一致性状态。
  • 隔离性 允许多个并发事务同时对其数据进行读写和修改的本领,隔离性可以防止多个事务并发实验时由于交织实验而导致数据的不一致。
  • 持久性 表明事务一旦提交,其结果就是永世性的。
7.1.2 JTA和JTS的关系和区别

  JTA界说了一组高级事务管理的API,为Java开发人员提供了一个标准的方式来进行分布式事务处理。而JTS(Java Transaction Service)是JTA的实现,它符合OMG OTS(Object Transaction Service)规范,确保了跨多个资源的事务的完整性。


  • JTA 是API层面的描述,提供了事务管理的接口。
  • JTS 是实际的实现细节,是运行时事务服务的底层基础。
7.2 JTA在WebLogic中的配置和应用

7.2.1 配置JTA事务管理器

  在WebLogic Server中,JTA事务管理器的配置通常是通过管理控制台完成的。以下是基本的配置步骤:

  • 登录WebLogic管理控制台。
  • 导航到“服务” -> “事务”部门。
  • 选择“事务管理器”进行配置,包括设置事务超时、日志记载等参数。
  1. <!-- 示例配置 -->
  2. <weblogic-transaction-descriptor>
  3.     <default-transaction-timeout>10</default-transaction-timeout>
  4.     <!-- 配置其他事务管理器参数 -->
  5. </weblogic-transaction-descriptor>
复制代码
7.2.2 编程实现分布式事务处理

  在编写Java代码时,通过引入JTA相关的类来实现分布式事务。使用  javax.transaction.UserTransaction  接口开始、提交或回滚事务。
  1. import javax.transaction.UserTransaction;
  2. import javax.naming.InitialContext;
  3. import java.util.Properties;
  4. public class JTAExample {
  5.     public void performTransaction() throws Exception {
  6.         UserTransaction userTransaction = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
  7.         userTransaction.begin();
  8.         try {
  9.             // 执行业务逻辑
  10.             // ...
  11.             ***mit();
  12.         } catch (Exception e) {
  13.             userTransaction.rollback();
  14.             throw e;
  15.         }
  16.     }
  17. }
复制代码
7.3 JTA事务管理的优化和监控

7.3.1 事务的性能优化策略

  事务优化策略主要包括:


  • 减少分布式事务的范围和连续时间。
  • 减少事务中锁定的资源数量和时间。
  • 使用事务池来缓存和重用数据库连接。
  • 使用合适的事务隔离级别,以减少锁定资源所需的开销。
7.3.2 事务监控和故障恢复方法

  WebLogic提供了多种监控和管理事务的工具,包括:


  • 事务监控器 通过管理控制台查看事务日志和性能指标。
  • 故障恢复 实现故障转移和补偿事务,确保体系稳定性。
  • 日志分析 对事务日志进行分析,了解事务实验情况,及时调整事务策略。
  1. graph LR
  2. A[开始监控事务] --> B[收集事务日志]
  3. B --> C[分析事务性能指标]
  4. C --> D[诊断问题]
  5. D --> |如果需要| E[故障恢复]
  6. D --> |无问题| F[继续监控]
复制代码
监控和优化JTA事务管理是一个连续的过程,需要不断地调整和改进以满足业务需求和体系性能。在实际操作中,还需要结合具体的业务场景和体系情况,选择合适的工具和策略。
   本文还有配套的精品资源,点击获取  

  简介:J2EE(Java 2 Platform, Enterprise Edition)是一种用于构建企业级分布式应用的框架,由Sun Microsystems推出,提供丰富的API和服务,支持多层架构。在本课程中,将深入探讨如安在Oracle的WebLogic Server上部署和运行J2EE应用步调。课程内容包括Servlet、JSP、EJB、JMS、JTA等关键组件的代码实现以及WebLogic Server的管理,旨在资助学习者掌握J2EE开发和WebLogic服务器使用,提升企业级应用开发技能。
   本文还有配套的精品资源,点击获取  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表