Documentation for Crowd 1.6. Documentation for other versions of Crowd is available too.

On this page:

If you are familiar with writing a listener for Confluence, writing a listener plugin for Crowd should be almost identical.

In Crowd, events are thrown for almost all operations that occur to a user. (If you need more or find a spot we haven't thought of, please let us know!.)

The Listener Plugin Module

Below is an example atlassian-plugin.xml that will configure your event Listeners:

<atlassian-plugin name="Example Listeners" key="crowd.listeners.core" system="false">

    <plugin-info>
        <description>This contains example listeners</description>
        <vendor name="Atlassian Software Systems" url="http://www.atlassian.com"/>
        <version>1.0</version>
    </plugin-info>

    <listener name="Reset Password Listener" key="resetpasswordlistener" class="com.atlassian.crowd.event.listener.ResetPasswordListener">
        <description>Will handle reset password events, sending out a principal their new password.</description>
    </listener>
</atlassian-plugin>

The Event Listener Class

Your event listener must implement the com.atlassian.event.EventListener interface:

package com.atlassian.event;

/**
 * Defines a listener for Crowd events.
 */
public interface EventListener
{
    /**
     * Perform some action as a response to an event. The EventManager will
     * ensure that this is only called if the class of the event matches one of the
     * classes returned by getHandledEventClasses
     *
     * @param event some event triggered within Crowd
     */
    void handleEvent(Event event);

    /**
     * Determine which event classes this listener is interested in.
     * 
     * <p>The EventManager performs rudimentary filtering of events by their class. If
     * you want to receive only a subset of events passing through the system, return
     * an array of the Classes you wish to listen for from this method.
     *
     * <p>Listening for a class will also listen for all its subclasses. (And listening
     * for an interface will listen for any implementation of that interface)
     *
     * <p>Returning an empty array will allow you to receive every event.
     *
     * @return An array of the event classes that this event listener is interested in,
     *         or an empty array if the listener should receive all events. <b>Must not</b>
     *         return null.
     */
    Class[] getHandledEventClasses();
}

Events and Event Types

Most event types in Crowd currently extend com.atlassian.crowd.event.DirectoryEvent. If you want to see the current list of available events, please take a look at Crowd's JavaDoc.

Generally Crowd uses the following naming scheme for events:
<Object><Operation>Event

For example:
PrincipalUpdatedEvent.
This event would indicate that a Principal (<Object>) has been updated (<Operation>).

Limitations of Events

Please take note of the following limitations:

  • Events are a notification that something has occurred. The event system is not designed to allow a listener to veto the action that caused the event.
  • There is no loop detection. If you write a listener for the GroupUpdatedEvent that itself causes a GroupUpdatedEvent to be generated, you are responsible for preventing the ensuing infinite loop.

Examples of Event Listeners

We would suggest looking at the current Crowd source. Currently there are only a few listeners implemented in Crowd, but more will come.

The above example of a module descriptor defines a ResetPasswordListener. Please look at this listener if you need a practical example.

関連トピック

Developing Plugins for Crowd

  • ラベルなし