自学内容网 自学内容网

了解EJB两种主要类型:BMP与CMP

        EJB(Enterprise JavaBeans)是Java EE(Enterprise Edition)平台的核心组件技术之一,旨在简化企业级应用程序的开发、部署和管理。EJB技术通过封装业务逻辑和数据访问逻辑,提高了代码的可重用性、可维护性和可扩展性。在EJB中,有两种主要的持久化类型:BMP(Bean-Managed Persistence)和CMP(Container-Managed Persistence)。这两种类型各有优缺点,适用于不同的应用场景。本文将对BMP和CMP进行详细阐述,并结合实践进行说明,以便读者能够更好地理解和选择适合的持久化方式。

 

BMP(Bean-Managed Persistence)

        BMP,即Bean管理的持久化,是一种由EJB组件自身负责数据持久化的方式。在BMP中,开发者需要在实体Bean中直接编写SQL语句,并通过JDBC(Java Database Connectivity)API进行数据库操作。这意味着开发者需要负责获取数据库连接、执行SQL语句以及处理结果集。

BMP的优点
  1. 灵活性
    BMP允许开发者完全控制SQL语句和数据访问逻辑,这使得在复杂查询、优化SQL语句和进行特定数据库操作时具有很高的灵活性。开发者可以根据具体的业务需求,编写最适合的SQL语句,从而提高系统的性能和响应速度。

  2. 可控性
    在BMP中,开发者可以明确知道何时何地进行了数据库操作,便于调试和排查问题。此外,由于SQL语句和数据访问逻辑都在Bean中明确编写,这也有助于代码的可读性和可维护性。

  3. 跨数据库支持
    由于BMP允许开发者直接编写SQL语句,因此可以更容易地支持多种数据库。当需要更换数据库时,只需修改SQL语句,而无需对EJB容器或持久化框架进行大的改动。

BMP的缺点
  1. 代码冗余
    BMP需要在每个Bean中编写大量的数据库操作代码,这会导致代码冗余和难以维护。特别是在大型系统中,这种情况尤为突出。

  2. 资源管理复杂
    开发者需要自行管理数据库连接、事务和异常处理等资源,这增加了代码的复杂性和出错的可能性。

  3. 移植性差
    由于BMP依赖于具体的SQL语句和数据库特性,因此当需要将系统移植到其他数据库时,可能需要修改大量的代码。

BMP的实践应用

        在实际应用中,BMP通常用于以下几种情况:

  • 复杂查询:当需要执行复杂的SQL查询时,BMP提供了更高的灵活性和可控性。
  • 性能优化:在需要优化数据库操作性能的场景中,BMP允许开发者根据具体的业务需求,编写最优的SQL语句。
  • 特定数据库特性:当需要使用特定数据库特性(如存储过程、触发器等)时,BMP可以更方便地实现这些需求。

        例如,在一个电子商务系统中,需要计算某个商品在一段时间内的销售情况。由于这个查询涉及到多个表的联接和聚合操作,使用BMP可以更方便地编写和执行这个复杂查询。

public class ProductSalesBean implements EntityBean {
    // 省略其他方法和属性

    public void calculateSales(Date startDate, Date endDate) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = // 获取数据库连接
            String sql = "SELECT SUM(sales_amount) FROM sales WHERE product_id = ? AND sale_date BETWEEN ? AND ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, this.productId);
            pstmt.setDate(2, new java.sql.Date(startDate.getTime()));
            pstmt.setDate(3, new java.sql.Date(endDate.getTime()));
            rs = pstmt.executeQuery();

            if (rs.next()) {
                this.salesAmount = rs.getDouble(1);
            }
        } catch (SQLException e) {
            // 异常处理
        } finally {
            // 关闭资源
        }
    }
}

CMP(Container-Managed Persistence)

        CMP,即容器管理的持久化,是一种由EJB容器负责数据持久化的方式。在CMP中,开发者无需编写数据库操作代码,只需在实体Bean中定义业务方法和属性,然后在EJB部署描述符(ejb-jar.xml)中配置CMP字段即可。EJB容器会自动处理数据库连接、SQL语句执行和结果集处理等工作。

CMP的优点
  1. 简化开发
    CMP大大简化了开发工作,开发者无需编写数据库操作代码,只需关注业务逻辑的实现。这降低了代码的复杂性和出错的可能性。

  2. 提高可维护性
    由于CMP将数据库操作逻辑封装在EJB容器中,因此当数据库结构发生变化时,只需修改部署描述符,而无需修改Bean代码。这提高了代码的可维护性和可扩展性。

  3. 事务管理
    EJB容器负责事务的管理和提交,确保了数据的一致性和完整性。开发者无需担心事务的边界和回滚等问题。

CMP的缺点
  1. 灵活性差
    CMP限制了开发者对SQL语句和数据访问逻辑的控制,使得在复杂查询和性能优化方面存在困难。

  2. 学习成本高
    由于CMP涉及EJB容器的内部机制和部署描述符的配置,因此初学者可能需要花费更多的时间和精力来理解和掌握。

  3. 依赖性强
    CMP对EJB容器的依赖较强,当需要使用其他持久化框架或技术时,可能需要进行较大的改动。

CMP的实践应用

        在实际应用中,CMP通常用于以下几种情况:

  • 简单CRUD操作:对于基本的创建、读取、更新和删除操作,CMP提供了简单而有效的解决方案。
  • 业务逻辑为主:当业务逻辑是系统的核心时,CMP可以让开发者更专注于业务逻辑的实现,而无需关注数据持久化的细节。
  • 快速开发:在需要快速开发和部署系统的场景中,CMP可以显著提高开发效率。

        例如,在一个用户管理系统中,需要实现用户的注册、登录和修改密码等功能。这些功能主要涉及对用户表的简单CRUD操作,因此可以使用CMP来实现。

<!-- ejb-jar.xml -->
<ejb-jar>
    <entity>
        <ejb-name>UserBean</ejb-name>
        <primkey-class>java.lang.String</primkey-class>
        <cmp-field>
            <field-name>userId</field-name>
        </cmp-field>
        <!-- 其他配置 -->
    </entity>
</ejb-jar>
public class UserBean implements EntityBean {
    private String userId;
    private String username;
    private String password;

    // 省略其他方法和属性

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }
}

        在这个例子中,我们只需在UserBean中定义业务方法和属性,并在ejb-jar.xml中配置CMP字段即可。EJB容器会自动处理数据库操作,无需编写额外的数据库操作代码。

总结

        BMP和CMP是EJB技术中的两种主要持久化方式,各有优缺点。BMP提供了更高的灵活性和可控性,适用于复杂查询、性能优化和特定数据库特性的场景;而CMP则简化了开发工作,提高了可维护性,适用于简单CRUD操作、业务逻辑为主和快速开发的场景。在选择持久化方式时,需要根据具体的业务需求和技术特点进行权衡和选择。同时,随着Java EE技术的发展和演进,越来越多的持久化框架和技术(如JPA、Hibernate等)涌现出来,为开发者提供了更多的选择和解决方案。


原文地址:https://blog.csdn.net/huaqianzkh/article/details/145230924

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!