0

バックグラウンドプロセスとしてサービス呼び出しを実行するプラグインがあります。つまり、ユーザーのアクションに直接関係しないタイマーに対して何らかのアクションを実行します。

私がする必要があるのは、このサービス呼び出しが終了するたびに「メイン」アプリケーションでいくつかのコードを実行することです。そのプラグインコードにフックする方法はありますか?私はプラグインコードにアクセスできるので、それを変更することは大きな障害ではありません。

4

1 に答える 1

2

プラグインサービスが完了したときにイベントを公開し、メインアプリケーションでそのイベントをリッスンすることができます。私はこのパターンを数回使用しましたが、アプリケーションのさまざまな部分を切り離すのに非常に便利な方法でした。これを行うには、イベントクラスを作成します。

class PluginEvent extends ApplicationEvent {
   public PluginEvent(source) {
      super(source)
   }
}

次に、プラグインサービスにを実装してもらいますApplicationContextAware。これにより、プラグインにイベントを公開する方法が提供されます

class PluginService implements ApplicationContextAware {
  def applicationContext

  def serviceMethod() {
     //do stuff
     publishPluginEvent()  
  }

  private void publishPluginEvent() {
    def event = new PluginEvent(this)
    applicationContext.publishEvent(event)
  }
}

次に、メインアプリケーションで、イベントが公開されたときに応答するリスナーサービスを作成します。

class ApplicationService implements ApplicationListener<PluginEvent> {
   void onApplicationEvent(PluginEvent event) {
     //whatever you want to do in your app when 
     // the plugin service fires.
   }
}

このリスナーはGrailsサービスである必要はなく、POJO / POGOを使用するだけで済みますが、内部でSpringBeanとして構成する必要がありますresources.groovy

私は最近このアプローチを使用していて、それは私にとってうまくいきました。Grailsツールボックスにあるのは間違いなく素晴らしいツールです。

于 2012-09-18T14:27:44.683 に答える