我应该使用哪个Spring Entity Manager Factory?

时间:2011-12-12 19:49:47

标签: spring jpa entitymanager

Spring中有两个实体管理器工厂bean可以用于我的应用程序。 org.springframework.orm.jpa.LocalEntityManagerFactoryBeanorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean。我使用Spring 3.0和EclipseLink JPA 2.2。

我读到的关于这两者的内容是它们是相同的。除了LocalContainerEntityManagerFactoryBean使用编织。它是什么?而且,我为什么要使用它?

2 个答案:

答案 0 :(得分:2)

“Weaving”是一个用于程序转换的术语,通常围绕“面向方面编程”领域进行讨论。转换通常不会对源进行,但.class(字节码)和更改字节码的技术术语是“字节码检测”。

  

为什么我要使用它?

您使用的JPA实现可能依赖于它提供的某些功能的字节码检测,因此您可能会被迫使用它。

为了使编织正常工作,您可能需要指定-javaagent:例如,请参阅此处的'Eclipse Junit'部分。

看起来LocalContainerEntityManagerFactoryBean允许您配置weaver实现(

 DefaultContextLoadTimeWeaver, GlassFishLoadTimeWeaver, InstrumentationLoadTimeWeaver, OC4JLoadTimeWeaver, ReflectiveLoadTimeWeaver, SimpleLoadTimeWeaver, WebLogicLoadTimeWeaver

之一

在XML文件中,而不是依赖于-javaagent运行时参数。

这种配置并不是一个很重要的因素,我猜。

文档解释的其他功能,听起来像决定因素。

  

LocalEntityManagerFactoryBean引导程序适用于仅使用JPA进行数据访问的独立应用程序。如果要为外部DataSource和/或跨多个资源的全局事务设置持久性提供程序,则需要将其部署到完整的Java EE 5应用程序服务器并通过JNDI访问已部署的EntityManagerFactory,或者使用Spring的LocalContainerEntityManagerFactoryBean,根据JPA的容器合同,具有适当的本地设置配置。

答案 1 :(得分:1)

如果您计划将应用程序部署到Application Server并让Application Server管理Entity Manager Factory和Transactions,那么LocalContainerEntityManagerFactoryBean可能是更好的选择。如果您希望Application更加孤立,那么LocalEntityManagerFactoryBean会更合适。

此博客可以帮助您提供更多信息:http://second-kind-demon.blogspot.com/2011/06/spring-jpa-java-ee-jboss-deployment.html