首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EJB的资料辅导(4)

EJB的资料辅导(4)

作者头像
紫风
发布2025-10-14 17:19:05
发布2025-10-14 17:19:05
730
举报

实体的状态

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(); } } }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档