Spring中有两个实体管理器工厂bean可以用于我的应用程序。 org.springframework.orm.jpa.LocalEntityManagerFactoryBean
和org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
。我使用Spring 3.0和EclipseLink JPA 2.2。
我读到的关于这两者的内容是它们是相同的。除了LocalContainerEntityManagerFactoryBean
使用编织。它是什么?而且,我为什么要使用它?
答案 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