1

Grailsでアプリを作成しましたが、クォーツに問題があります。DBからユーザーをフェッチし、その後、サーバーもフェッチします。サーバーがある場合は、それぞれのPINGコマンドを確認したいのですが、次のようなメッセージが表示されます。

JobRunShell ^ 549 | 走る 。。org.quartz.simpl.SimpleThreadPool$WorkerThreadで
IllegalStateExceptionが原因:スレッドにバインドされたリクエストが見つかりません:実際のWebリクエストの外部でリクエスト属性を参照していますか、それとも最初に受信したスレッドの外部でリクエストを処理していますか?実際にWebリクエスト内で操作していて、それでもこのメッセージを受信する場合は、コードがDispatcherServlet / DispatcherPortletの外部で実行されている可能性があります。この場合、RequestContextListenerまたはRequestContextFilterを使用して現在のリクエストを公開します。->> 131 | org.springframework.web.context.request.RequestContextHolderのcurrentRequestAttributes "

これは私のコードです:

 def execute() {
     pingService.checkPing()
 }



 def checkPing = {
     User user = User.findByLogin(session.user.login) //get user
     def hostsToPing = importFromDB()
     if (!hostsToPing.isEmpty()) {
         hostsToPing.each {host ->
             doPing(host)
         }
     } else {
         //something else
     }
 }

 def importFromDB = {
     User user = User.findByLogin(session.user.login)
     def hostsList = Host.findAllByUser(user)
     hostsList
 }

 def doPing(Host host) {
     println "InetAdress: " + InetAddress.getByName(host.hostAdress)
     println "InetAdress is Rea: " + InetAddress.getLocalHost().isReachable(1000)
 }

次のような場合、この問題はありません。

def doPing(Host host) {
    println "InetAdress: " + InetAddress.getByName("www.google.com")
    println "InetAdress is Reachable : " + InetAddress.getLocalHost().isReachable(1000)
}

誰かが何が悪いのか知っていますか?

4

1 に答える 1

1

それはあなたが参照しているからsession.user.loginです。期間sessionはありません。Jobユーザーがログインしていないときにジョブが開始されると想像してください-そのとき、どのユーザーを参照していますか?

したがって、すべてのユーザーをチェックインするかUser.list()、ユーザーキューを使用してシングルトンBeanを作成します。

于 2012-12-04T22:24:47.343 に答える