• EJB学习之EntityBean(实体Bean)


    转载:http://jdlsfl.iteye.com/blog/209397 作者:jdlsfl

    序言:

    那么首先我们要讲到的是EntityBean就是实体Bean。

    实体 Bean

       用于封装业务实体的EJB 组件

    一.      数据源和连接池

    数据源:

    Data source , 获取数据的来源。

    作用:Web服务器只要配置好数据源的名称后,程序可以直接调用数据源而得到数据库连接。当web服务器更换或数据库更换时候,只要数据源的名称不变,并不影响程序。

    连接池:

    用来存放数据库连接的容器。

    作用:当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。

    特点:现在假设:最大维持连接数是10,最大连接数是20,最大等待时间是10000(毫秒)
    其过程:最开始在连接池中有10个连接(最大维持连接数),当有用户申请连接时,其将一个连接分配用户,直到连接池中的10个连接全都分配出去,当第 11个用户申请连接时,它将创建第11个连接并分配给该用户,直到把第20个连接(最大连接数)分配给第20个用户,当第21个用户申请连接时,它需要等待,直到前面的20个用户中某一个断开了连接,才会把那个连接分配给第21个用户,当用户断开连接时(第11至20个连接),该连接不会立刻被释放而是需 要等待10000毫秒(最大等待时间),才被释放,当没有用户连接时,连接池内还保持10个连接。

    演示weblogic配置数据源和连接池

    二.      实例Bean

    什么是实体Bean:

    EntitiyBean是用来封装业务实体的持久存储的EJB组件.

    它是业务实体

    也是持久化对象

    用来存储在数据库中的数据

    业务概念/系统名词

    为什么要使用实体Bean:

    在安全保护和事务上下文中执行

    可重用性高

    表示持久层数据对象

    支持同时访问(并发)

    什么是实体Bean的持久性:

    Java 对象序列化

    对象-关系映射

    对象数据库

    Java 对象保存在永久存储器中

    使用 Oracle 或 Microsoft SQL

    Server 等关系数据库

    存放整个对象

    实体 Bean 是持久对象,即使应用程序结束,它仍然存在

    持久性

      

    何时使用实体Bean:

    1、Bean应表示业务实体而非业务过程时;

    2、Bean的状态应该是持久的时候。

    实体Bean类型

    根据实体Bean的类型我们可以把它分为两类:

    一、CMP   Container-Manager Persistence

    二、BMP   Bean-Manager Persistence

    CMP是由容器来管理Bean的添加、更新、查询和删除的操作,并由EJB容器自动启动事务。

    使用CMP最大的特点是:

    BMP是由开发者自己编写的代码来管理Bean的添加、更新、查询和删除的操作,并手动控制事务。

    BMP的特点:手动编写数据库连接代码,

    实体Bean编写规范

    哪么如何才能编写一个EntityBean?

    EntityBean规范
                      |
                      |___Home接口  提供添加、查找数据实体的方法
                      |
                      |___远程接口  提供访问更新和得到数据方法
                      |
                      |___Bean类    数据库操作方法

    ejbCreate() : 创建方法,调用该方法时会在数据库中插入新数据。实体Bean类可以有多个ejbCreate()方法,但参数不同。

    ejbPostCreate() : 该方法在ejbCreate()方法执行完成之后调用。每个ejbCreate()方法都有一个对象的ejbPostCreate()方法,且会调用它来完成初始化后的操作。

    ejbLoad() : 刷行数据库的实例对象的数据。容器可将持久层的数据加载到实体Bean的内存中。

    ejbStore() : 用于将实体Bean的当前字段保存在持久层。保证了数据库中和高速缓存中匹配。

    ejbRemove() : 用于从持久层删除一条记录。

    findByPrimaryKey() ; 按主键去查找一个实例Bean的实例。

    weblogic-cmp-rdbms-jar.xml 配置CMP配置文件

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE weblogic-rdbms-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic <st1:chsdate isrocdate="False" month="12" islunardate="False" day="30" year="1899">8.1.0</st1:chsdate> EJB RDBMS Persistence//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-rdbms20-persistence-810.dtd">

    <weblogic-rdbms-jar>

      <weblogic-rdbms-bean>

        <ejb-name>Jobs</ejb-name>

        <data-source-name>pubs</data-source-name>

        <table-map>

          <table-name>jobs</table-name>

          <field-map>

            <cmp-field>jobId</cmp-field>

            <dbms-column>job_id</dbms-column>

          </field-map>

          <field-map>

            <cmp-field>jobDesc</cmp-field>

            <dbms-column>job_desc</dbms-column>

          </field-map>

          <field-map>

            <cmp-field>minLvl</cmp-field>

            <dbms-column>min_lvl</dbms-column>

          </field-map>

          <field-map>

            <cmp-field>maxLvl</cmp-field>

            <dbms-column>max_lvl</dbms-column>

          </field-map>

        </table-map>

        <automatic-key-generation>

          <generator-type>SQLserver</generator-type>

        </automatic-key-generation>

      </weblogic-rdbms-bean>

    </weblogic-rdbms-jar>

        实体Bean调用过程

    介绍完规范后,我们来讲解一下EntityBean被客户端的调用过程:

    当EntityBean不存在时由容器创建一个EntityBean,容器就会调用实体Bean类的setEntityContext()方法,将上下文传递给Bean。 EntityBean创建实例后即刻将实例放入实例池中。池中所有的实例都完全相同。容器调用ejbActivate()方法将实体Bean放入就绪池,容器就会给实体Bean实例指定一个标识。

    什么情况下EntityBean的实例会从入池状态转换成就绪状态?

    有两种情况:

    第一种是客户端调用create()方法,容器调用ejbCreate()和ejbPostCreate()方法

    第二种是EJB容器调用ejbActive()方法。(当实体Bean处于就绪状态时,可调用业务方法。)

    什么情况下EntityBean的实例会从就绪状态转换成入池状态?

    第一种是当客户端调用remove()方法时,EJB容器调用ejbRemove()方法。

    第二种是EJB容器调用ejbPassivate()方法。

    最后,EJB容器删除池中的Bean实例就会调用unsetEntityContext()方法,因此实体Bean就不存在了。

  • 相关阅读:
    memcached事故
    总算会用sphinx生成文档了
    python tip
    抓包工具wireshark
    狗日的用户体验
    python tip
    pymmseg
    memcached事故
    windwos序列号
    7z fromat on ubuntu&replace my fujishu electric fan
  • 原文地址:https://www.cnblogs.com/anuoruibo/p/2411800.html
Copyright © 2020-2023  润新知