论坛首页 入门技术论坛

EJB的资料辅导(4)

浏览 1323 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-08  


实体的状态

new新建,也就是新建的实体实例,其信息还没有持久到数据库中。
managed受管状态,也就是实体已经持久化到数据库中,并且已经和持久化上下文进行了关联。
detached分离状态,也就是与持久化上下文解除关联的实体的状态
removed删除,此时实体和持久化上下文进行了关联,但是要从数据库中删除这个实体。


  new      persist()    中止PersistenceContext >
  ——>新建————>受管========================分离
                     ||\   <  merge()
            remove()\|| persist()
                    删除


@PersistenceContext,持久化上下文是内存中的实例和数据库间的连接枢纽,就像是一快缓冲区,但这个缓冲区是由容器来进行管理的,在这个缓冲区中的实体是处在受管理状态。

@PersistenceContext(type=PersistenceContextType.EXTENDED,unitName="PetPU")
type属性使用来标识持久化上下文的类型的,持久化上下文有两种类型事务范围和扩展的。这两种类型的持久化上下文的生命周期不同。unitName属性是指定持久化单元的名字,其值是在持久化单元定义文件中persistence-unit标签中的name属性的值。

事务范围的持久化上下文应用到无状态SessionBean,一旦事务终结,就销毁,其中的实体也会变成分离状态。
扩展的持久化上下文应用在有状态的SessionBean,只有在有状态的SessionBean被容器销毁是才会销毁持久化上下文,也就使实体一直是被管理的。

持久化单元的定义文件,这个文件是描述数据库连接和事务管理的文件

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="PetPU" transaction-type="JTA">
    <!--transaction-type是事务管理的类型-->
    <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    <!--SPI,持久化API的实现类的提供者-->
    <jta-data-source>my.jdbc</jta-data-source>
     <!--数据源的配置-->
    <properties>
      <property name="toplink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

EntityManager实体管理器,它是用来管理实体的,如果使用容器管理实体,容器就会注入EntityManager,EntityManager可以提供实体类生命周期管理,实现数据的同步,和实体的数据的查询。

实体生命周期回调方法

实体的生命周期回调方法不是通用的。
在实体类中定义时,只在方法前加标注,并且方法的返回值为void,方法为public
也就是:

@PrePersist
public void save(){}
在另外的类中写生命周期回调方法时,就需要以这个实体类为参数了
class AcountListenter{
@PrePersist
public void save(Acount a){}
}

@Entity
@EntityListenters(AcountListenter.class)
class Acount...

PostPersist
PreRemove
PostRemove
PreUpdate
PostUpdate
PostLoad


MessageDriverBeanS(MDB 消息驱动Bean)

消息驱动Bean,可以实现异步编程,也就是发送消息,而不必等待返回确认,也就像发邮件一样,只是发出,而阻塞不必等待回应。

消息驱动Bean是在接受到消息之后再通过onMessage方法进行消息的处理,也就是消息的消费者,消息驱动Bean也是无状态的。

    public void onMessage(Message message)  {
        if(message instanceof TextMessage){
            TextMessage tm=(TextMessage)message;
            String s = null;
            try {
                s = tm.getText();
            } catch (JMSException ex) {
                ex.printStackTrace();
            }
            try {
                tm.setText("reserve"+s);
            } catch (JMSException ex) {
                ex.printStackTrace();
            }
        }
    }

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics