Custom Channel Lifecycle
By using the Java API, you can create your own custom channel according to your requirement. While implementing a custom channel, you can extend custom channel classes and override custom channel methods that BusinessEvents invokes during startup.
Refer to Java API Reference for complete list of Java classes and interfaces for the custom channel. However, few of the key Java classes, interfaces and their key components are mentioned in the following sections identifying the channel lifecycle in BusinessEvents.
Channel and Destination Class Instantiation
Channel and destination class instances are created during the engine startup by using the information provided in the drivers.xml file and in the project. For each of your custom channel defined in the project, BusinessEvents creates one instance of the driver class as defined in drivers.xml and calls the driver class's getChannel method. Typically, the getChannel method must return a new channel instance of your channel class.
Similarly, for each of the destination of each of your custom channel found in the project, BusinessEvents calls Driver.getDestination method. Typically, the getDestination method return a new instance of your destination class.
During startup, BusinessEvents invokes the various lifecycle methods of your custom channel in the sequence specified in the following figure.
Channel.init
Initialize your channel in this method. Extend the BaseChannel class to create your custom channel class and then you can override the init method to perform initialization of your channel. During initialization, your custom channel can access the channel properties that you have defined in drivers.xml using the getChannelProperties method and access the runtime TIBCO BusinessEvents properties using the getBeProperties method. For example, when you override the Channel.initmethod, you can set up initialization objects such as thread pools for internal use, connection objects for connecting to your channel endpoints, and so on.
If you override the init method, you must initialize each destination manually, or you call the super.init method. The super.init method initializes each of the channel's destinations by calling the BaseDestination.init method for each destination of the channel.
Destination.init
Extend the BaseDestination class to create your custom destination class. In case, the destination need initialization, override the init method to initialize your destination. You can access destination properties by using the getDestinationProperties method. You can access the parent channel instance by using the getChannel method and in turn channel and TIBCO BusinessEvents properties from the channel instance.
Channel.connect
For connection based transports, such as JMS or WebSphere MQ, override the connect method to initiate the connection to the underlying data provider or data source. By default, the BaseChannel implementation calls the BaseDestination.connect method for each of your destinations. In case your destination does not have a connection semantic, you can simply implement an empty method.
If you override the connect method, you must initiate connection for each destination manually, or you call the super.connect method. The super.connect method initiates connection for each of the channel's destinations by calling the BaseDestination.connect method for each destination of the channel.
Destination.bind
The next step in the TIBCO BusinessEvents startup sequence is the BaseDestination.bind method. Whenever an agent becomes active, TIBCO BusinessEvents calls the BaseDestination.bind method for each of the destination defined in CDD under Input Destinations Collections of the agent. The bind method binds the underlying RuleSession to a destination, that is, whenever a message arrives on that destination endpoint, the message is routed to the RuleSession associated with the destination. Thus, the message triggers the rules associated with its bounded RuleSession.
In the bind method, you must start your destination's message listeners and store or bind the EventProcessor instance, that is handed out by the framework to this listener. When a message arrives at this listener's endpoint, you must convert this message to an event by using the serializer for your destination, and then send that event to the TIBCO BusinessEvents framework by calling the EventProcessor.processEvent method.
Channel.start
The next step during TIBCO BusinessEvents startup sequence is the BaseChannel.start method. For each of the channels, TIBCO BusinessEvents calls the start method. By default, the BaseChannel.start method calls the BaseDestination.start method for each destination. Use this call to start dispatching messages from the underlying transport.
If you override the start method, you can call the super.start method to start each of the channel's destinations by calling the BaseDestination.start method.
If you override the start method, you must start each destination manually, or you call the super.start method. The super.start method starts each of the channel's destinations by calling the BaseDestination.start method for each destination of the channel.
Channel.suspend
TIBCO BusinessEvents invokes the BaseChannel.suspend method when you need to suspend the channel. Provide a meaningful implementation in this method to suspend receiving of messages for your destination.
If you override the suspend method, you need to suspend each destination manually, or you can call the super.suspend method. The super.suspend method suspends each of the channel's destinations by calling the BaseDestination.suspend method for each destination of the channel.
Channel.resume
TIBCO BusinessEvents invokes the BaseChannel.resume method when you need to resume the suspended channel. Provide a meaningful implementation in this method to resume receiving of messages for your destination.
If you override the resume method, you need to resume each destination manually, or you can call the super.resume method. The super.resume method resumes each of the channel's destinations by calling the BaseDestination.resume method for each destination of the channel.