首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

SpringDM札记23-Using the open EntityManager in view pattern实现延迟加载

2012-10-30 
SpringDM笔记23-Using the open EntityManager in view pattern实现延迟加载1. The open EntityManager in

SpringDM笔记23-Using the open EntityManager in view pattern实现延迟加载

1. The open EntityManager in view pattern

??? 使用Hibernate实现延迟加载时常见的异常:

??? org.hibernate.LazyInitializationException:
??? failed to lazily initialize a collection of role:
??? com.manning.sdmia.dataacces.domain.model.Contact.adresses,
??? no session or session was closed

?

??? With Spring, the lazy loading is tied to its resource management within its data access support.

??? According to the data access configuration, Spring is responsible for obtaining and releasing the

??? underlying resources of the JPA implementation. This implies that the scope of the resource

??? transparently changes. These are the impacts on resources scope in two use cases.

?

??? ■ No transaction configured—Spring obtains an EntityManager instance before the call of every

??? JpaTemplate method and releases it after each call. EntityManager instances aren’t gathered and

??? every call uses a different EntityManager.
??? ■ Transaction applied on service methods—Spring obtains an EntityManager instance and uses it

??? for all the nested calls within the service method logic. The resource is obtained before the call of

??? every service method, stored in a variable of type ThreadLocal, and released when the service

??? method exits.

2. Using the open EntityManager in view pattern with Spring DM

??? Components using the open EntityManager in view pattern and data access components are

??? typically separated, because the former implement the UI of applications. Moreover, data access

??? components must make their EntityManagerFactory entities accessible as OSGi services so that

??? the user interface component can get at them。

??? Exporting the EntityManagerFactory bean as an OSGi service:

??? <bean id="entityManagerFactory" interface="javax.persistence.EntityManagerFactory"/>

??? web.xml中的配置:

??? <filter>
?????????? <filter-name>openEntityManagerInViewFilter</filter-name>
?????????? <filter-class>
???????????????? org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
?????????? </filter-class>
??? </filter>
??? <filter-mapping>
?????????? <filter-name>openEntityManagerInViewFilter</filter-name>
?????????? <url-pattern>/*</url-pattern>

??? </filter-mapping>???

??? You’ll notice that the filter is, by default, based on the EntityManagerFactory bean with the

??? identifier entityManagerFactory. This configuration can be changed with the?

??? entityManagerFactoryBeanName filter initialization parameter. After performing this configuration,

??? your web application can lazily load data to build its views.

?

??? To summarize, the open EntityManager in view pattern provides a workable solution to using

??? lazy loading in JPA. This feature isn’t difficult to implement in an OSGi environment using Spring

??? DM, but it requires the sharing of EntityManagerFactory. Components using this pattern are

??? then tied to the underlying technology both through the service type and by the packages

??? needed in the manifest configuration.

热点排行