2016-09-28 107 views
0

我打算註冊一個事件監聽器,以偵聽作爲項目一部分的組織在我的組織的confluence wiki上發生的任何內容更改,並將數據重新索引到彈性搜索。我已經找到示例來編寫一個監聽器 - https://developer.atlassian.com/confdev/confluence-plugin-guide/confluence-plugin-module-types/event-listener-module/writing-an-event-listener-plugin-module匯合atlassian更改事件監聽器

但我不確定如何將此解決方案與現有的合流服務集成,以便我開始獲取事件?任何工作示例共享或導致這將是非常有用的。

謝謝!

回答

0

假設您使用的是Confluence服務器,則需要在開發計算機上使用install the Atlassian SDK並創建Confluence add-on

做完所有這些之後,你應該有一個骨架Confluence插件。

接下來,你需要一個事件偵聽器componenteventPublishercomponent-import添加到您的atlassian-plugin.xml文件像這樣:

<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-version="2"> 
    <plugin-info> 
     <description>${project.description}</description> 
     <version>${project.version}</version> 
     <vendor name="${project.organization.name}" url="${project.organization.url}" /> 
    </plugin-info> 

    <component 
     key="scroll-versions-event-listener" 
     class="me.davidsimpson.confluence.addons.example.listener.ScrollVersionsPublishEventListener" 
     name="Scroll Versions Publish Event Listener" 
     > 
    </component> 

    <component-import key="eventPublisher" interface="com.atlassian.event.api.EventPublisher" /> 

</atlassian-plugin> 

接下來,你需要創建一個事件偵聽器的類文件。這裏有一個出發點:在這個例子中

package me.davidsimpson.confluence.addons.example.listener; 

import com.atlassian.event.api.EventPublisher; 
import org.springframework.beans.factory.DisposableBean; 

public class ScrollVersionsPublishEventListener implements DisposableBean 
{ 
    protected final EventPublisher eventPublisher; 

    public ScrollVersionsPublishEventListener(EventPublisher eventPublisher) 
    { 
     this.eventPublisher = eventPublisher; 
     eventPublisher.register(this); 
    } 

    /** 
    * Unregister the listener if the plugin is uninstalled or disabled. 
    */ 
    public void destroy() throws Exception 
    { 
     eventPublisher.unregister(this); 
    } 

    @com.atlassian.event.api.EventListener 
    public void onVersionPublishEvent(Object event) { 

     String eventName = event.getClass().getCanonicalName(); // will work for other people's events, not just Atlassian's 

     // Spit out all events - just to prove the point 
     System.out.println(" ++ an event happened: " + eventName); 

     if (eventName.equals("com.k15t.scroll.platform.event.space.VersionPublishEvent")) { 
      System.out.println(" ++++ Found the right event "); 

      // Do your stuff here... 
     } 
    } 
} 

通知,所有事件都打印到控制檯,但我們檢查在這個例子中特定的非標事件。

if (eventName.equals(...))更改爲您感興趣的活動,您應該準備好了。

+0

嗨,是否有可能重新呈現一個頁面,如果一個特定的事件發生? – JayBee

+0

請舉例說明你的意思。你的意思是某種客戶端JavaScript事件?還是服務器端的Confluence事件? 正常匯合事件將不會有人在觸發時間打開頁面的概念。 – dvdsmpsn