BitBucket分支创建和删除多次触发的事件

时间:2017-05-26 18:58:57

标签: java events bitbucket branch bitbucket-server

我正在开发一个BitBucket插件,用于通知存储库和分支事件的用户。在测试分支事件时,我注意到多次触发delete和create事件(我没有收听BranchChangedEvent)。根据我的理解,事件也会为继承的类触发,并由下面显示的两个方法处理。

@EventListener
public void onBranchCreatedEvent(BranchDeletedEvent event) {
    //do something
}

@EventListener
public void onBranchCreatedEvent(BranchCreatedEvent event) {
    //do something
}

有没有一种很好的方法可以处理这两个事件,而无需跟踪已处理的内容?我的要求是捕获创建/删除分支的名称和相对URL。

2 个答案:

答案 0 :(得分:0)

为了解决这个问题,我在类级保留了@Component注释,如下所示,并在atlassian-plugin.xml文件中添加了组件注册。

@Component
public class MyEventListener implements DisposableBean { 

    ... ctor with injected EventPublisher eventPublisher

    @EventListener
    public void onBranchCreatedEvent(BranchDeletedEvent event) {
        //do something
    }

    @EventListener
    public void onBranchCreatedEvent(BranchCreatedEvent event) {
        //do something
    }

    public void destroy() throws Exception {
         eventPublisher.unregister(this);
    }
}

Atlassian的-plugin.xml的

 <component key="bitbucket-activity-listener" class="my.package.name.MyEventListener">
 </component>

别忘了在bitbucket-maven-plugin下的pom.xml中删除Atlassian-Plugin-Key标记。

希望这有帮助。

答案 1 :(得分:0)

我是Bitbucket Server开发人员之一。您不清楚如何从您发布的代码段中注册您的事件监听器。它还不清楚您的插件是如何打包的,这一点也很重要。

如果您有一个组件(无论是使用@Componentspring-scanner创建的,还是使用<component/>中的atlassian-plugin.xml标记创建的),您应该从不需要明确引用EventPublisher.registerunregister。 Bitbucket Server包含一个帮助程序,可以检测@EventListener注释,因为正在创建/销毁附加组件,并且自动处理其注册/取消注册。这意味着如果您使用EventPublisher手动注册您的侦听器实例,它将被注册两次,并且每次接收两次事件。

另一种可能性是,您实际上最终会注册您的侦听器的 2个实例。你通常可以看到&#34;这很容易在调试器中通过在@EventListener方法中放置断点并在每次遇到断点时查看System.identityHashCode(this)(其中this是您的侦听器实例)。如果您从identityHashCode获得多个结果,则表示您有多个实例。 (如果你没有在你的监听器上覆盖toString(),你也应该能够使用它来确定你是否有多个实例,因为默认实现包括身份hashcode为十六进制字符。)I&#39; ve帮助其他附加开发人员解决他们有多个听众实例的问题;例如,stash2slack add-on。那个帖子也可能对你有用。

如果您想分享有关附加组件的其他详细信息,我们很乐意帮助进一步调查。