0

在这里,我有一项名为“DataSaveService”的服务,用于保存对象,例如..

class DataSaveService {

    static transactional = true

    def saveObject(object)
    {
        if(object != null)
        {
            try
            {
                if(!object.save())
                {
                    println( ' failed to save ! ')
                    System.err.println(object.errors)
                    return false
                }
                else
                {
                    println('saved...')
                    return true
                }
            }
            catch(Exception e)
            {
                System.err.println("Exception :" + e.getMessage())
                return false
            }
        }
        else
        {
            System.err.println("Object " + object + " is null...")
            return false
        }

    }
}

该服务很常见,并且被许多类的对象用于存储。当有多个请求时,保存速度很慢,或者你可以说它很笨重。由于默认范围,即单例。

所以,我认为为了减少工作量,我打算将此服务作为会话范围。喜欢..

静态范围 = '会话'

然后在我在控制器中访问此服务和方法后,它生成了异常.. 会话范围服务该怎么办?,实现这个场景的任何其他想法......?

主要是我想要在云中获得最佳性能。是的,我需要云的答案。

4

1 回答 1

2

单例(如果它没有标记为synchronized)可以同时从不同的线程并行调用,没有性能损失,这不是瓶颈。

但是如果你真的需要线程安全(意味着你有一些共享状态,应该在一个方法调用中使用,或者在一个 http 请求期间从应用程序的不同部分使用,甚至来自同一用户的不同请求,并且你不会运行您在云中的应用程序),然后您可以使用不同的范围,例如sessionrequest范围。但我不确定这是一个好的架构。

对于您当前的示例,使用非单例范围没有任何好处。而且,您必须知道,相同服务的实例很少需要额外的内存和 cpu 资源。

于 2012-06-19T12:55:57.393 回答