2015-04-02 37 views
1

我在Grails 2.3.7上創建了一個簡單的應用程序,可以顯示我的問題。單身代理服務器中的Grails會話範圍服務在控制器中變爲空

我在整個應用程序中創建了一個控制器和一個服務。這裏是我的TestController.groovy:

package testsession 

class TestController { 
    def testingsessionServiceProxy 
    def index() { 
     println testingsessionServiceProxy.getSomeVariable() 
    } 
} 

我TestingsessionService.groovy:

package testsession 

import grails.transaction.Transactional 

@Transactional 
class TestingsessionService { 
    static scope="session" 
    static proxy=true 
    def somevariable=false 
    def getSomeVariable() { 
     somevariable 
    } 
} 

運行此應用程序,我在TestController.groovy爲testingsessionServiceProxy得到空。請參閱下面的跟蹤:

....Error 
| 
2015-04-02 18:09:28,122 [http-bio-8080-exec-7] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /TestSession/test/index 
Cannot invoke method getSomeVariable() on null object. Stacktrace follows: 
Message: Cannot invoke method getSomeVariable() on null object 
    Line | Method 
->> 6 | index  in testsession.TestController 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 200 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run  in java.lang.Thread 

回答

1

據我所知,此功能計劃在Grails 3.1中實現。看看這張票:GRAILS-5701

但是你可以通過在resources.groovy定義它像下面手動創建代理:

testingsessionServiceProxy(ScopedProxyFactoryBean) { 
    targetBeanName = 'TestingsessionService' 
    proxyTargetClass = true 
} 

看看this article,它描述了問題。還有一個plugin提供此功能,但我沒有測試它。

+0

我看過那篇文章。它非常容易混淆說Grails 1.3默認會這樣做。也許grails 2.3默認不會添加這個代理屬性。它只有在你添加插件後纔會出現。順便說一句我已經使用了插件,但沒有用:( – rahulserver 2015-04-02 13:58:05

0

有幾件事情你實際的服務是TestingsessionService但你注入了..

def testingsessionServiceProxy 

嘗試注入和

def testingsessionService 

其次

testingsessionService.getSomeVariable() 

而且你在尋找價值有@Transactional這是爲整個班級,但你沒有數據庫的工作,只有你如果它的整個班級除了數據庫工作或根據實際需要的服務定義進行設置,那就是這樣。