注意:PersistenceContext未确切了解,是否是每个钝化对象对应一个,是否是跟线程Contexts有关.
应该是跟线程Contexts关联,因为可能有多个数据源
package org.jboss.seam.contexts;
import java.io.Serializable;
import javax.persistence.EntityManager;
import org.hibernate.Session;
import org.jboss.seam.Component;
import org.jboss.seam.Seam;
import org.jboss.seam.persistence.HibernatePersistenceProvider;
import org.jboss.seam.persistence.PersistenceContexts;
import org.jboss.seam.persistence.PersistenceProvider;
import org.jboss.seam.transaction.Transaction;
/**
* A swizzled entity reference, consisting of the class,
* id and persistence context name.
*
* @see EntityBean
* @see org.jboss.seam.persistence.ManagedEntityInterceptor
*
* @author Gavin King
*
*/
class PassivatedEntity implements Serializable
{
private static final long serialVersionUID = 6565440294007267788L;
private Object id;
private Object version;
private String persistenceContext;
private Class<?> entityClass; //TODO: make this transient, and serialize only the class name..
private PassivatedEntity(Object id, Object version, Class<?> entityClass, String persistenceContext)
{
this.id = id;
this.persistenceContext = persistenceContext;
this.entityClass = entityClass;
this.version = version;
}
private String getPersistenceContext()
{
return persistenceContext;
}
private Object getId()
{
return id;
}
private Class<?> getEntityClass()
{
return entityClass;
}
public boolean isVersioned()
{
return version!=null;
}
/**
* 根据保存ID version class从数据库中获取Object 激活
*/
public Object toEntityReference(boolean checkVersion)
{
Object persistenceContext = Component.getInstance( getPersistenceContext() );
if ( persistenceContext==null )
{
return null;
}
else
{
if (persistenceContext instanceof EntityManager)
{
return getEntityFromEntityManager(persistenceContext, checkVersion);
}
else
{
return getEntityFromHibernate(persistenceContext, checkVersion);
}
}
}
private Object getEntityFromHibernate(Object persistenceContext, boolean checkVersion)
{
//TODO: split this out to somewhere to isolate the Hibernate dependency!!
Session session = (Session) persistenceContext;
if ( session.isOpen() )
{
Object result = session.load( getEntityClass(), (Serializable) getId() );
if (result!=null && checkVersion)
{
checkVersion(session, result);
}
return result;
}
else
{
return null;
}
}
private void checkVersion(Session session, Object result)
{
Object version = HibernatePersistenceProvider.getVersion(result, session);
if (version!=null)
{
HibernatePersistenceProvider.checkVersion(result, session, this.version, version);
}
}
private Object getEntityFromEntityManager(Object persistenceContext, boolean checkVersion)
{
EntityManager em = (EntityManager) persistenceContext;
if ( em.isOpen() )
{
Object result = em.getReference( getEntityClass(), getId() ); //从EM中getReference
if (result!=null && checkVersion)
{
checkVersion(em, result); //check version is ok
}
return result;
}
else
{
return null;
}
}
private void checkVersion(EntityManager em, Object result)
{
Object version = PersistenceProvider.instance().getVersion(result, em);
if (version!=null)
{
PersistenceProvider.instance().checkVersion(result, em, this.version, version); //check version
}
}
/*public static Object unpassivateEntityAndCheckVersion(String key)
{
return unpassivateEntity(key, true);
}
public static Object unpassivateEntity(String key)
{
return unpassivateEntity(key, false);
}
private static Object unpassivateEntity(String key, boolean checkVersion)
{
PassivatedEntity passivatedEntity = (PassivatedEntity) Contexts.getConversationContext().get(key);
return passivatedEntity==null ? null : passivatedEntity.toEntityReference(checkVersion);
}*/
/**
* 钝化一个实体,判断是否是Entity
* 1.获取一个持久化上下文EntityManager
* 2.判断是使用Native HIbernate还是JPA
* 3.判断实体是否受管
* 4.获取Entity id version class persistenceContextName
* 5.创建钝化实体
*/
public static PassivatedEntity passivateEntity(Object value)
{
Class entityClass = Seam.getEntityClass( value.getClass() );//检测是否是实体,包括EJB,如果不是则返回null
if (entityClass!=null)
{
for ( String persistenceContextName: PersistenceContexts.instance().getTouchedContexts() )
{
Object persistenceContext = Component.getInstance(persistenceContextName);
return createPassivatedEntity(value, entityClass, persistenceContextName, persistenceContext);
}
}
return null;
}
private static PassivatedEntity createPassivatedEntity(Object value, Class entityClass, String persistenceContextName, Object persistenceContext)
{
if (persistenceContext instanceof EntityManager)
{
return createUsingEntityManager(value, entityClass, persistenceContextName, persistenceContext);
}
else
{
return createUsingHibernate(value, entityClass, persistenceContextName, persistenceContext);
}
}
/*private static String storeConversationContext(PassivatedEntity result)
{
if (result==null)
{
return null;
}
else
{
String key = result.getKey();
Contexts.getConversationContext().set( key, result );
return key;
}
}
private String getKey()
{
return "org.jboss.seam.passivatedEntity." + entityClass.getName() + '#' + getId();
}*/
private static PassivatedEntity createUsingHibernate(Object value, Class entityClass, String persistenceContextName, Object persistenceContext)
{
//TODO: split this out to somewhere to isolate the Hibernate dependency!!
Session session = (Session) persistenceContext;
if ( isManaged(value, session) )
{
Object id = session.getIdentifier(value);
Object version = HibernatePersistenceProvider.getVersion(value, session);
return create(entityClass, persistenceContextName, id, version);
}
else
{
return null;
}
}
private static boolean isManaged(Object value, Session session)
{
boolean managed;
try
{
managed = session.isOpen() && session.contains(value);
}
catch (RuntimeException re)
{
//just in case! //TODO; deleteme
managed = false;
}
return managed;
}
private static PassivatedEntity createUsingEntityManager(Object value, Class entityClass, String persistenceContextName, Object persistenceContext)
{
EntityManager em = (EntityManager) persistenceContext;
if ( isManaged(value, em) )
{
Object id = PersistenceProvider.instance().getId(value, em); //获取Entity的ID
Object version = PersistenceProvider.instance().getVersion(value, em);//版本,version可能为null
return create(entityClass, persistenceContextName, id, version);
}
else
{
return null;
}
}
/**
* EM is open or EMC contains this object
*/
private static boolean isManaged(Object value, EntityManager em)
{
boolean managed;
try
{
managed = em.isOpen() && em.contains(value);
}
catch (RuntimeException re)
{
//workaround for bug in HEM! //TODO; deleteme
managed = false;
}
return managed;
}
private static PassivatedEntity create(Class entityClass, String persistenceContextName, Object id, Object version)
{
if (id==null)
{
//this can happen if persist() fails in Hibernate
return null;
}
else
{
return new PassivatedEntity(id, version, entityClass, persistenceContextName);
}
}
static boolean isTransactionRolledBackOrMarkedRollback()
{
try
{
return Transaction.instance().isRolledBackOrMarkedRollback();
}
catch (Exception e)
{
return false;
}
}
@Override
public String toString()
{
return entityClass + "#" + id;
}
}
分享到:
相关推荐
java毕业设计源码,可供参考
Windows下的FRP图形化客户端,对应FRP版本0.61.1,需要64位操作系统
基于优化EKF的PMSM无位置传感器矢量控制研究_崔鹏龙.pdf
旧物置换网站的开发过程中,采用B / S架构,主要使用Java技术进行开发,结合最新流行的springboot框架。中间件服务器是Tomcat服务器,使用Mysql数据库和Eclipse开发 环境。该旧物置换网站包括管理员、用户、卖家。其主要功能包括管理员:首页、个人中心、用户管理、卖家管理、旧物类型管理、旧物信息管理、置换交易管理、系统管理等,卖家后台:首页、个人中心、旧物类型管理、旧物信息管理、置换交易管理。前台首页;首页、旧物信息、网站公告、个人中心、后台管理等,用户后台:首页、个人中心、旧物信息管理、置换交易管理、用户可根据关键字进行信息的查找自己心仪的信息等。 (1)用户功能需求 用户进入前台系统可以查看首页、旧物信息、网站公告、个人中心、后台管理等操作。前台首页用例如图3-1所示。 (2)管理员功能需求 管理员登陆后,主要功能模块包括首页、个人中心、用户管理、卖家管理、旧物类型管理、旧物信息管理、置换交易管理、系统管理等功能。 关键词:旧物置换网站,Mysql数据库,Java技术 springboot框架
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
航天模拟器文件、蓝图、代码
两级式单相光伏并网仿真研究:MATLAB 2021a版本下的DC-DC变换与桥式逆变技术实现功率跟踪与并网效果优化,基于Matlab 2021a的两级式单相光伏并网仿真研究:实现最大功率跟踪与稳定的直流母线电压,两级式单相光伏并网仿真(注意版本matlab 2021a) 前级采用DC-DC变电路,通过MPPT控制DC-DC电路的pwm波来实现最大功率跟踪,mppt采用扰动观察法,后级采用桥式逆变,用spwm波调制。 采用双闭环控制,实现直流母线电压的稳定和单位功率因数。 并网效果良好,thd满足并网要求,附带仿真说明文件 ,两级式单相光伏并网仿真; MATLAB 2021a; DC-DC变换电路; MPPT控制; 扰动观察法; 桥式逆变; SPWM波调制; 双闭环控制; 直流母线电压稳定; 单位功率因数; 并网效果; THD。,MATLAB 2021a双闭环控制两级式单相光伏并网仿真研究
光伏MPPT仿真研究:光照强度和温度对太阳能电池输出特性的影响及调整策略,助力光伏发电学习。,光伏MPPT仿真研究:光照强度和温度对太阳能电池输出特性的影响及调整策略学习指南,光伏mppt仿真:通过调整太阳光照, 温度等因素 , 光照强度和温度对太阳能电池输出特性的影响。 可用于学习光伏发电 ,光伏MPPT仿真;太阳光照调整;温度影响;光照强度;太阳能电池输出特性。,光伏MPPT仿真:光照与温度对太阳能电池输出特性的影响研究
随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处理,实现信息化,无纸化办公。 本课题在充分研究了在Springboot框架基础上,采用B/S模式,以Java为开发语言,MyEclipse为开发工具,MySQL为数据管理平台,实现的内容主要包括首页,个人中心,综合管理等功能。
航天模拟器文件、蓝图、代码
西门子Smart PLC四轴搬运取料机案例程序:从新手到项目的跃升之路,西门子Smart PLC四轴搬运取料机运动控制案例程序——PLC通信与伺服电机自动化控制解决方案,西门子200smart运动控制四轴搬运取料机案例程序 该程序为两台smart plc通过通讯控制四轴伺服电机的搬运取料机案例工程案例程序。 包含200smar_PLC程序+项目电气接线图(PDF图纸)+程序流程说明+触摸屏程序(步科) 程序包括伺服电机的启动,停止,原点定位,回归原点,位置控制以及方向控制。 包括了所有控制伺服电机的指令,里面有指令的用法的详细解释和程序说明。 拿来就能用的案例程序,结合程序案例中学习,就会轻松快速的掌握。 让你从新手直接能做项目。 动作流程: 客户上好料盒,M1轴伺服跑到第一片料的位置,气缸将料推出到上位置, M2轴在上料位置取件后移动到直线电机的,加工位置,m2轴上通过有上料下料的气缸, 用真空吸住料后m2轴移动到一个二维平台的加工位置,把带加工的料放到加工位置后, 激光器开始加工,加工完成后,通过M2轴把料取下,移动到成品放料位置,放料后, M3轴将成品料推送到M4
航天模拟器文件、蓝图、代码
基于双碳背景下阶梯式碳交易机制与电制氢的综合能源系统热电优化策略研究与求解分析,基于双碳背景下阶梯式碳交易机制与电制氢的综合能源系统热电优化策略及经济性研究,考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化 “双碳”背景下,为提高能源利用率,优化设备的运行灵活性,进一步降低综合能源系统(IES)的碳排放水平,提出一种IES低碳经济运行策略。 首先考虑IES参与到碳交易市场,引入阶梯式碳交易机制引导IES控制碳排放;接着细化电转气(P2G)的两阶段运行过程,引入电解槽、甲烷反应器、氢燃料电池(HFC)替传统的P2G,研究氢能的多方面效益;最后提出热电比可调的热电联产、HFC运行策略,进一步提高IES的低碳性与经济性。 基于此,构建以购能成本、碳排放成本、弃风成本最小的低碳经济运行目标,将原问题转化为混合整数线性问题,运用CPLEX商业求解器进行求解,通过设置多个运行情景,对比验证了所提策略的有效性。 关键词:氢能;阶梯式碳交易机制;热电比可调;综合能源系统;低碳经济 ,关键词:阶梯式碳交易机制;综合能源系统(IES);热电优化;设备运行灵活性;碳排放水平;电转气(P2G);电解槽;氢
MMC分布式储能系统:实现恒功率与恒电压控制的无缝切换技术,MMC分布式储能系统实现恒功率与恒电压控制的无缝切换技术,mmc分布式储能 恒功率控制 恒电压控制 无缝切 ,核心关键词:MMC分布式储能; 恒功率控制; 恒电压控制; 无缝切换。,MMC分布式储能系统:恒功率与恒电压控制的无缝切换技术
多频多快拍稀疏贝叶斯学习目标方位序贯估计_牛海强.pdf
交错并联Boost PFC仿真电路模型:双闭环控制方式下的输出电压与电感电流优化控制,优良波形及Simulink仿真实现,交错并联Boost PFC仿真电路模型:双闭环控制方式下的电压外环与电感电流内环优化,优质波形表现于Simulink仿真中,交错并联Boost PFC仿真电路模型 采用输出电压外环,电感电流内环的双闭环控制方式 交流侧输入电流畸变小,波形良好,如效果图所示 simulink仿真 matlab simulink仿真模型 无报告哈 ,核心关键词:交错并联Boost PFC仿真电路模型;双闭环控制方式;输出电压外环;电感电流内环;交流侧输入电流畸变小;波形良好;Simulink仿真;Matlab Simulink仿真模型。,基于Simulink仿真的交错并联Boost PFC双闭环控制模型优化研究
基于53#三菱PLC与组态王系统的音乐喷泉控制系统设计与组态设计探讨,基于53#三菱PLC的组态王音乐喷泉控制系统设计与实现:音乐喷泉组态设计的探索与实践,53#三菱PLC和组态王音乐喷泉控制系统设计音乐喷泉组态设计音乐喷泉 ,53#三菱PLC; 组态王音乐喷泉控制系统设计; 音乐喷泉组态设计; 音乐喷泉,三菱PLC与组态王协同音乐喷泉控制系统设计
(要求1)基于随机博弈的无人机集群动态对抗决策.pdf
基于特征值与特征向量的计算,实现MATLAB代码进行参与因子分析研究,特征值与特征向量计算:MATLAB代码实现因子分析的方法与步骤,特征值、左右特征向量计算,参与因子分析MATLAB代码 ,特征值; 左右特征向量计算; 参与因子分析; MATLAB代码,MATLAB中特征值与左右特征向量计算,助力因子分析
基于Matlab的无线充电仿真研究:四套模型解析——LLC谐振恒压输出、LCC-S拓扑磁耦合谐振恒压输出、LCC-P拓扑磁耦合谐振恒流输出及S-S拓扑补偿模型探究,基于Matlab的无线充电仿真研究:四套模型深度解析——LLC谐振器恒压输出与磁耦合谐振无线电能传输技术,无线充电仿真 simulink 磁耦合谐振 无线电能传输 MCR WPT lcc ss llc拓扑补偿 基于matlab 一共四套模型: 1.llc谐振器实现12 24V恒压输出 带调频闭环控制 附参考和讲解视频 2.lcc-s拓扑磁耦合谐振实现恒压输出 附设计过程和介绍 3.lcc-p拓扑磁耦合谐振实现恒流输出 附设计过程 4.s-s拓扑补偿 带原理分析,仿真搭建讲解和参考,可依据讲解自行修改参数建模 四套打包 ,无线充电仿真; Simulink; 磁耦合谐振; 无线电能传输; MCR; WPT; LLC拓扑补偿; LCC-S拓扑; 调频闭环控制; 设计过程; 恒压输出; 恒流输出; 参数建模。,基于Matlab Simulink的无线充电仿真模型:MCR WPT的LLC、LCC-S、LCC-P及S-S拓扑研