2014-12-05 56 views
0

我已經創建了一個服務NotifierService使用grails郵件插件發送電子郵件。依賴注入不能在使用郵件插件的grails作業中工作

class NotifierService { 
    MailService mailService 

    def sendWarningEmail(String name, String email, Date blockingDate) { 
     try { 
      mailService.sendMail { 
       to email 
       from "[email protected]" 
       subject "Status message: Warning" 
       body (view:"/email/warningEmail", model:[ 
                name:name, 
                blockingDate:blockingDate 
                ]) 
      } 
     } catch (Exception e) { 
      e.printStackTrace() 
     } 
    } 
} 

我創造了另一種服務ApplicationUtilService在我試圖使用NotifierService

class ApplicationUtilService{ 
    def notifierService 

    def notifyUser(){ 
     notifierService.sendWarningEmail("User name", "[email protected]", new Date()) 
    } 
} 

我試圖打電話notifyUser()在Grails的工作UpdateJob

class UpdateJob{ 
    def applicationUtilService 

    static triggers = { 
     // Scehduling parameters 
    } 

    def execute(){ 
     applicationUtilityService.notifyUser() 
    } 
} 

我收到以下錯誤

Error 2014-12-05 12:04:53,550 [quartzScheduler_Worker-1] ERROR listeners.ExceptionPrinterJobListener - Exception occurred in job: Grails Job 
Message: java.lang.NullPointerException: Cannot invoke method notifyUser() on null object 
    Line | Method 
->> 111 | execute in grails.plugins.quartz.GrailsJobFactory$GrailsJob 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 202 | run  in org.quartz.core.JobRunShell 
^ 573 | run . . in org.quartz.simpl.SimpleThreadPool$WorkerThread ...` 

它的工作原理,當我實例爲

ApplicationUtilService applicationUtilService = new ApplicationUtilService()

而不是使用grails依賴注入。再次,ApplicationUtilService中的notifierService也出現同樣的問題,並通過實例化上述相同的問題進行修復。

現在,真正的問題是與mailService。上面的實例化不起作用。我怎麼能解決它

+0

你有沒有在'grails-app/services'下定義你的兩個服務? – injecteer 2014-12-05 12:28:06

+0

是的,在服務 – Syam 2014-12-05 12:30:51

+0

下定義我忘記提及我正在使用grails 2.2.4版本 – Syam 2014-12-05 12:36:53

回答

1

空指針發生在UpdateJob.applicationUtilService,所以它看起來像applicationUtilService沒有正確注入到UpdateJob。 UpdateJob是否在正確的包裝中?

+0

是的,實際上我所有的實現都在'com.mydomain.dev'包中,我使用'create-job com.mydomain.dev.UpdateJob'創建了這個作業。它是在'MyApp/grails-app/jobs/com/mydomain/dev /'下創建的 – Syam 2014-12-05 13:13:47