/*
* Copyright 2015 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.registry.event.core;
import org.wso2.carbon.registry.event.core.exception.EventBrokerException;
import org.wso2.carbon.registry.event.core.subscription.EventDispatcher;
import org.wso2.carbon.registry.event.core.subscription.Subscription;
import org.wso2.carbon.registry.event.core.topic.TopicManager;
import org.wso2.carbon.user.api.UserStoreException;
import java.util.List;
/**
* The main eventing interface for the other components. this interface supports two kinds of
* subscriptions.
* 1. Subscriptions with event dispatcher.
* Event broker does not persists these subscriptions and call the on message method upon
* receiving an event.
* 2. Subscriptions with event dispatcher's name.
* Event broker persists these subscriptions. It is responsibility of the user who calls this
* method to register the {@link EventDispatcher} with
* the given name. In a server restart again caller has to register the
* {@link EventDispatcher}.
*/
public interface EventBroker {
/**
* Subscribe using the given subscription details.
*
* @param subscription the subscription
* @return subscription ID
* @throws EventBrokerException
*/
public String subscribe(Subscription subscription) throws EventBrokerException;
/**
* Unsubscribes a subscription
*
* @param id subscription ID
* @throws EventBrokerException
*/
public void unsubscribe(String id) throws EventBrokerException;
/**
* Get subscription from subscription ID
*
* @param id subscription ID
* @return the subscription
* @throws EventBrokerException
*/
public Subscription getSubscription(String id) throws EventBrokerException;
/**
* Renews a subscription. Updates expiry time, removal and resetting of the properties
*
* @param subscription the subscription to renew
* @throws EventBrokerException
*/
public void renewSubscription(Subscription subscription) throws EventBrokerException;
/**
* Get all subscriptions
*
* @param filter filter value. use * for all
* @return a list of subscriptions
* @throws EventBrokerException
*/
public List<Subscription> getAllSubscriptions(String filter) throws EventBrokerException;
/**
* Publish an event to the given topic asynchronously. i.e it starts a new thread to send the
* message.
*
* @param message - message to publish. this contains the OMElement of the message and any
* properties.
* @param topicName topic name
*/
public void publish(Message message, String topicName) throws EventBrokerException;
/**
* Publish an event to the given topic asynchronously. i.e it starts a new thread to send the
* message.
*
* @param message - message to publish. this contains the OMElement of the message and any
* properties.
* @param topicName topic name
* @param deliveryMode - persist or not
*/
public void publish(Message message, String topicName, int deliveryMode)
throws EventBrokerException;
/**
* Publish an event to the given topic synchronously. i.e it uses the same thread to send the
* message.
*
* @param message message to publish. this contains the OMElement of the message and any
* properties.
* @param topicName topic name
*/
public void publishRobust(Message message, String topicName) throws EventBrokerException;
/**
* Publish an event to the given topic synchronously. i.e it uses the same thread to send the
* message.
*
* @param message - message to publish. this contains the OMElement of the message and any
* properties.
* @param topicName topic name
* @param deliveryMode - persist or not
*/
public void publishRobust(Message message, String topicName, int deliveryMode)
throws EventBrokerException;
/**
* Register an event dispatcher in the case of using subscriptions with eventBrokerName
*
* @param eventDispatcherName event dispatcher name
* @param eventDispatcher event dispatcher
*/
public void registerEventDispatcher(String eventDispatcherName,
EventDispatcher eventDispatcher);
/**
* Gets the topic manager
*
* @return topic manager
* @throws EventBrokerException
*/
public TopicManager getTopicManager() throws EventBrokerException;
/**
* This method is called when a tenant initialize. to do the initialization works for tenants
* for event broker
*
* @throws EventBrokerException
* @throws UserStoreException
*/
public void initializeTenant() throws EventBrokerException, UserStoreException;
}