0 0

@PersistenceContext 线程安全的疑问10

在spring+jpa情况下,经常这么写service层或dao层

public class BrandServiceDao implements BrandDao {
     
    @PersistenceContext
    protected EntityManager entityManager;
     
    // business 
}

一般service和dao都被是singleton 但这种情况下,
entityManager没有线程安全问题么
或者说这么证明不同线程拿到的entityManager是不同的实例对象

我自己做了下模拟,也许方式不对,拿到的entityManager(代理对象)的hashcode都是一样的
嗯 原模原样的输出是:
Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalEntityManagerFactoryBean@1b64ef8]

共享的entityManager代理?

1个答案 按时间排序 按投票排序

0 0

采纳的答案

entityManager 线程不安全的

共享的entityManager代理?
你猜对了  spring提供了EntityManager 的 代理 EntityManagerProxy

SharedEntityManagerCreator来创建代理

return (EntityManager) Proxy.newProxyInstance(
(cl != null ? cl : SharedEntityManagerCreator.class.getClassLoader()),
ifcs, new SharedEntityManagerInvocationHandler(emf, properties));

2013年4月25日 16:18

相关推荐

    EJB3.0课件讲义

    EJB(Enterprise JavaBeans)3.0 是Java EE(Java Platform, Enterprise Edition)中的一个核心组件,用于构建可扩展、安全且易于管理的企业级应用程序。EJB 3.0 版本是在EJB 2.x的基础上进行重大改进,旨在简化开发...

    ejb3.0 实例教程

    EJB(Enterprise JavaBeans)是Java平台上的一个核心组件,用于构建可扩展的、安全的、事务性的企业级应用。EJB 3.0是其一个重要版本,引入了许多改进,简化了API,提高了开发效率。本教程将深入探讨EJB 3.0的基础...

    spring+jpa

    其次,Spring 实现了部分在 EJB 容器环境下才具有的功能,比如对 @PersistenceContext、@PersistenceUnit 的容器注入支持。 第三,也是最具意义的,Spring 将 EntityManager 的创建与销毁、事务管理等代码抽取出来...

    简单EJB3例子

    EJB3通过`@PersistenceContext`注解注入实体管理器,如下所示: ```java import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless public...

    ejb 3 官方 API

    8. **安全性**:EJB 3.0提供了基于角色的访问控制(Role-Based Access Control, RBAC)和其他安全特性,确保应用的安全性。 9. **持久化**:`@PersistenceContext`和`@PersistenceUnit`注解用于管理和访问持久化上...

    EJB3.0入门教程

    企业级JavaBean(Enterprise JavaBeans,EJB)是Java平台上用于构建可扩展、安全且事务处理能力强大的企业级应用的框架。EJB3.0是EJB技术的一个重大革新,它极大地简化了开发过程,降低了对开发者的要求,使其更加...

    EJB 3.0

    9. **安全性**:EJB 3.0允许开发者通过角色和权限控制对资源的访问,增强了应用的安全性。 **最新EJB 3.0实例教程**:这个压缩包文件可能包含一系列的教程,指导开发者如何使用EJB 3.0进行实际开发。教程可能涵盖...

    JBoss Myeclipse EJB3 First Demo

    例如,@Entity用于标记实体Bean,@Stateless和@Stateful分别用于无状态和有状态会话Bean,@PersistenceContext和@PersistenceUnit则用于管理持久化上下文。 MyEclipse是一款强大的集成开发环境(IDE),特别适合...

    EJBContainer:EJB 容器的个人实现

    每个事务都与打开它的线程的标识符相关联,以保证事务管理器的线程安全操作。 使用@PersistenceContext 注释的实体管理器注入。 然后,管理器使用事务管理器来检索当前事务并在那里执行其操作。 管理 EJB 初始化...

    EJB 3.0 学习资料

    EJB (Enterprise JavaBeans) 3.0 是Java EE (Enterprise Edition) 平台中用于构建企业级应用程序的重要组件。...然而,理解和熟练掌握EJB 3.0 技术,还需要深入学习其核心概念,如容器管理的事务、安全性和并发控制等。

    Enterprise JavaBean 3.0 persistence

    Enterprise JavaBean(EJB)3.0 是Java平台企业版(Java EE)中的核心组件,专为构建可扩展、安全且事务处理能力强大的分布式应用程序而设计。在EJB 3.0中,持久化(Persistence)是核心特性之一,它简化了对象与...

    Eclipse开发 Struts 2 + Spring 2 + JPA + AJAX

    在本例中,`@PersistenceContext`注解用于由Spring自动注入一个`EntityManager`实例,这样我们就可以在Service层或DAO层中执行JPA操作。同时,`@Transactional`注解确保在执行数据库操作时方法总是在事务中,以保证...

    精通EJB3.0

    例如,`@Entity`用于标记实体Bean,`@PersistenceContext`用于注入EntityManager,`@EJB`用于注入其他EJB等。 ### 2. 容器管理的持久性(CMP) EJB3.0强化了容器对持久性对象的支持,通过`@Entity`注解,开发者...

    eclipse中搭建java企业级项目

    在会话 Bean 中,我们使用 @PersistenceContext 注解注入持久化上下文,然后使用 EntityManager 对象来访问数据库中的数据。 项目搭建 在 Eclipse 中,我们可以按照以下步骤来搭建一个 Java 企业级项目: 1. 创建...

    spring + spring mvc + hibernate 之零配置之路源代码

    开发者可以通过`@EnableJpaRepositories`开启JPA仓库的支持,`@EntityScan`指定实体类的位置,以及`@PersistenceContext`注入EntityManager。 在"spring + spring mvc + hibernate 之零配置之路"的源代码中,你可能...

    EJB3_study

    **EJB3(Enterprise JavaBeans 3)**是Java企业版(Java EE)中的一个核心组件,用于构建可扩展、安全且事务处理能力强的企业级应用程序。EJB3相较于之前的版本,引入了许多重大改进,旨在简化开发流程并提高生产力...

    EJB3.0实例教程

    EJB 3.0为Bean提供了多种服务,包括安全性、性能监控、集群、调度、邮件服务等。开发者可以利用这些服务,无需关心底层实现。 **10. 测试支持** EJB 3.0支持单元测试和集成测试,可以使用JUnit或TestNG进行测试,...

    jpa的crud例子。

    3. **使用`EntityManager`**:在服务层,我们可以通过`@PersistenceContext`注入`EntityManager`,然后调用`persist()`方法来保存新实体。 ```java @Service public class PersonService { @PersistenceContext ...

Global site tag (gtag.js) - Google Analytics