【问题标题】:Hibernate session management with Spring and JAX-WS使用 Spring 和 JAX-WS 进行休眠会话管理
【发布时间】:2011-04-18 13:41:07
【问题描述】:

我有一个使用 Hibernate 进行持久性的应用程序,并且正在尝试实现一个 JAX-WS 接口(使用 Spring 框架公开它)。我还有一个调用持久层中的方法的服务类(用@WebService@WebMethod 注释)。处理延迟加载的对象时出现异常 (LazyInitializationException)。

我在 Quartz 作业中遇到了同样的问题,并且能够通过使用 org.springframework.aop.framework.ProxyFactoryBean 包装我的作业 bean 并提供 org.springframework.orm.hibernate3.HibernateInterceptor 来解决它。我试图用 ProxyFactoryBean 包装我的服务 bean,但收到有关代理不是带注释的 Web 服务的错​​误。

在这种情况下有没有办法做同样类型的事情,或者在这种情况下管理我的休眠会话的最佳方法是什么?

【问题讨论】:

标签: hibernate spring jax-ws


【解决方案1】:

因此,一种可能的选择是将我的实现分成两个类。一个包含调用数据库持久层的所有业务逻辑,另一个公开 Web 服务并调用业务逻辑。包含业务逻辑的类可以用 Spring 框架 ProxyFactoryBean 包装以利用 HibernateInterceptor

Java:

public class BusinessLogicClass implements MyInterface {
  public void doBusinessLogic() {
    //Perform Hibernate stuff here
  }
}

@WebService
public class WebServiceClass {
  BusinessLogicClass blc;

  public setBlc(BusinessLogicClass blc) {
    this.blc = blc;
  }

  @WebMethod
  public void doLogic() {
    blc.doBusinessLogic()
  }
}

Spring XML 配置:

<bean id="transactionalService" class="BusinessLogicClass">
</bean>

<bean id="transactionalServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target">
        <ref bean="transactionalMessageQueueService"/>
    </property>
    <property name="proxyInterfaces">
        <value>MyInterface</value>
    </property>
    <property name="interceptorNames">
        <value>hibernateInterceptor</value>
    </property>
</bean>

<bean id="webService" class="WebServiceClass">
    <property name="blc">
        <ref bean="transactionalServiceProxy"/>
    </property>
</bean>

这确实解决了我的问题。虽然对于我的应用程序来说,拥有两个具有基本相同方法的类有点烦人,只是让持久性工作......

-- 更新--

可以启用在基于 Spring XML 文件注释的翻译管理中使用代理配置的替代方法(可能是更好的替代方法),然后 BusinessLogicClass 中需要在事务中的每个方法都可以用 @ 注释987654327@。这是我最终使用的方法。

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2013-04-30
    • 2015-11-04
    • 1970-01-01
    • 2012-05-27
    • 2013-11-15
    • 2015-10-31
    • 2016-04-26
    相关资源
    最近更新 更多