Grails:跨控制器的SessionFactory和Session对象

时间:2013-10-20 22:59:07

标签: grails

在grails服务中,我使用API​​的会话工厂为外部API创建和管理callinng方法的会话,以启动连接:

1)服务会话对象(服务级别):

private final SessionFactory sessionFactory = SessionFactoryImpl.newInstance()
private Session session

2)服务getSession方法调用

def getSession(Map conf) {
        if (session == null) {
            ...

            Object o = sessionFactory.getRepositories(params)
            session = o.createSession()
        }
        session
}

3)从控制器

调用的服务连接器
def connect() {

<some logic>
        return session
    } 

4)在控制器中,我用:

检索会话对象
def session = service.connect()

一旦第一个连接创建了会话对象,在控制器之间共享它的最佳方式是什么(甚至在grails插件之外)? 如何确保会话对象被调用为单例(即避免每个控制器的方法调用重新初始化服务中的sessionFactory调用)?

1 个答案:

答案 0 :(得分:4)

Grails已经有一个SessionFactory bean,你可以声明它,依赖注入将为你处理它。

关于在控制器之间使用相同的会话,您将如何处理来自不同用户的并发请求?

一些想法:

  • 如果你的外部API有hibernate类,你可以map them with xml

  • 如果您的外部API需要SessionFactory,只需在您的服务中声明它

  • 如果您需要当前会​​话,请使用withSession

依赖注入的示例:

class MyService {
  def sessionFactory
  ...
}