2013-08-20 38 views
0

我正在寫一個gerrit插件並希望關閉插件重新啓動/關閉時的網絡連接。這可以使用LifecycleListener完成。如何在gerrit插件中使用LifecycleListener?

據我所知,有關Guice的gerrit插件有兩種操作模式。一個是不要在清單中聲明任何內容,並使用自動註冊的所有內容,使用註釋@Listen@Export。另一種是創建一個Guice模塊,並在該模塊中手動進行所有接線。

我想使用自動註冊,但我不能使它與LifecycleListener一起使用。添加@Listen註釋不起作用,Listener將被忽略。

我的代碼看起來是這樣的(最小):

@Listen 
@Singleton 
public class CommitValidationTest implements CommitValidationListener { 
     @Listen 
     public static class Lifecycle implements LifecycleListener { 
       @Override 
       public void start() { 
        // write to log 
       } 

       @Override 
       public void stop() { 
        // write to log 
       } 
     } 
} 
+0

你註冊了@ @ Listen'註解的攔截器嗎? –

+0

不,但'@ Listen'註釋由gerrit定義並用於插件'@ ExtensionPoint's的自動註冊。 – bseibold

+0

你的插件加載成功嗎?我嘗試在你的例子中使用相同的方法在提交消息長度驗證插件(一個核心Gerrit插件)上添加一個'LifecycleListener',它無法加載插件「com.google.gerrit.server.plugins.InvalidPluginException:無法註冊com.googlesource.gerrit.plugins.validators.CommitMessageLengthValidation $ Lifecycle,server does not accept com.google.gerrit.extensions.events.LifecycleListener「。 –

回答

1

我得知LifecycleListener s不能與自動註冊組合使用。

這裏的原因:爲了讓@Listen註釋工作,@ExtensionPoint接口,是由類實現(在這種情況下LifecycleListener)必須有一個吉斯模塊中的DynamicItemDynamicSetDynamicMap的定義,這是不情況爲LifecycleListener

+0

我在Gerrit問題跟蹤器[1]中提出了這個問題。 [1] https://code.google.com/p/gerrit/issues/detail?id=2101 –