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

问题描述 投票:0回答:2

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

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

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

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

java events bitbucket branch bitbucket-server
2个回答
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标记。

希望这可以帮助。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.