TIBCO Rendezvous Control and Event Generator User Guide
TIBCO® RendezvousTM (a product from TIBCO: www.tibco.com) enables exchange of data across applications running on distributed platforms. TIBCO Rendezvous (TIBCO RV) Event Generator is one of the WebLogic IntegrationTM event generators that you can create from the WebLogic Integration Administration Console. The TIBCO RV event generator listens for messages on a subject and raises events to the message broker on receiving the desired message.
Note: The TIBCO RV event generator (EG) is available in WebLogic WorkshopTM only for licensed users of WebLogic Integration.
Use of the TIBCO RV control and event generator with BEA WebLogic Integration in no manner confers or grants the right to use TIBCO Rendezvous including "dynamic libraries". In order to use such TIBCO products, the user of the TIBCO RV control and event generator must obtain a valid license from TIBCO. See http://www.tibco.com
for information on how to obtain a licensed copy of Rendezvous.
The TIBCO RV event generator enables WebLogic Integration generate events to message broker channels. The messages are received in most formats supported by Rendezvous, converted to binary and then published to the WebLogic Integration message broker.
Using TIBCO RV event generator, you can receive messages over the base Rendezvous and certified messaging (CM) transports. Certified messages can be received in either single or distributed queues, with support for clustering in the distributed queues processing. Receipt of each message can be acknowledged by implicit or explicit confirmation.
To learn more, see Event Generators in Managing WebLogic Integration Solutions, which is located at the following URL:
http://download.oracle.com/docs/cd/E13214_01/wli/docs85/manage/evntgen.html
TIBCO RV event generators can be deployed on a cluster with load balancing, high availability and failover features. They use distributed queues to support these clustering features. All event generators are automatically deployed on all managed servers from the WebLogic Integration Administration Console.
TIBCO RV event generators on a cluster subscribe to a subject with a single RV daemon machine, a distributed queue option and a distinct CM name entered at the time of event generator creation. Distributed queues work with the concept of scheduler and workers. One of the queues will act as a scheduler and others as workers.A scheduler distributes the messages to workers on a round robin basis, making sure the message is received by one and only one worker. This is also referred to as the "once and only once delivery".
The scheduler node sends messages to the worker nodes on a round robin basis. This is done by checking for pending tasks at individual workers end. Depending on the which worker is relatively free, the scheduler will assign the task. This is termed as load balancing.
This implies that at any given instance, a worker and a scheduler node is always available. If a worker node goes down with a managed server, another worker will be available. If a scheduler node goes down with a managed server, a worker will take over the role of the scheduler node.
This indicates that even if a worker node goes down before acknowledging receipt of message, the scheduler node will re-assign the task to the next available worker node.
Before adding the TIBCO RV Event Generator to the WebLogic Platform, perform the following:
After successful deployment, you will be able to create event generators from the WebLogic Integration console.
Note: In a cluster environment, deploy the TibRVEG.ear
file on the admin server only.
Perform the following steps to create a TIBCO RV event generator.
http://localhost:port/wliconsole
Figure 2-1 Creating a TIBCO RV Event Generator: Channel Rule Definition
Note: Select Use Distributed Queues option for the event generator to work on a cluster. Doing this would also make it mandatory to specify a CM name.
Note: While creating an event generator, if incorrect Rendezvous related values are entered (like network, daemon and so on), the event generator is created but, a runtime exception error will be displayed.
These Rendezvous properties are not verified at the form submission stage. These values are used only when the application attempts to connect to the specified Rendezvous daemon; hence, the runtime error.
On successful creation of an event generator, a WLI_TIBRV_
event-gen
.jar
file is created in the WebLogic server domain folder. Here, event-gen
is the unique name of the event generator as specified in step 4 above. This file connects to the Rendezvous daemon, as specified in the Channel Rule Definition form, and creates a listener on the subject.
Note: Always create a single rule definition for each unique event generator. Whenever an event generator is created with multiple channel rule definitions, only the first channel rule definition is recorded and used.
Explicit confirmation directs the listener to explicitly confirm delivery of message after publishing to the message broker. To employ the explicit confirmation feature, select the Confirm Message option while defining the rules for an event generator.
If explicit confirmation is selected in the OAM console, the TIBCO RV event generator will confirm the message only on successful completion of the subscribed JPDs.
Notes: JPDs need to have a synchronous subscription to confirm explicitly.
If any of the subscribed JPDs throw an exception error, the TIBCO RV event generator will not confirm the message.
Once the event generator has been created, it will start publishing messages on the subscribed subject to the WebLogic Integration message broker channel. Applications subscribed to that channel will receive the messages in raw data format. To retrieve the content of the message, insert a perform node with the following code:
TibrvMsg RecvdMsg = new TibrvMsg(receivedData.byteValue());
Where
receivedData
is of typecom.bea.data.RawData
and contains the message published by the TIBCO RV event generator.
In addition, you need to edit the following annotation in the JPD file:
/**
* @jpd:mb-static-subscription channel-name="/Soak/reply/TibcoDataChannel" message-body="{x0}"
*/
to read as follows:
/**
* @jpd:mb-static-subscription channel-name="/Soak/reply/TibcoDataChannel" message-body="{x0}" message-metadata="{x1}"
*/
Important: The parameter used in the annotation also needs to be added to the method definition. For an example, refer to Retrieving Information From a TIBCO RV Event Generator Header.
This section provides the schema of a TIBCO RV event generator header and an example code to retrieve information from the header.
<?xml version="1.0"?>
<xs:schema targetNamespace="http://www.bea.com/wli/control/TibHeaders" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.bea.com/wli/control/TibHeaders" elementFormDefault="qualified">
<xs:element name="TibHeaders">
<xs:complexType>
<xs:sequence>
<xs:element name="ReplySubject" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="SendSubject" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="TibrvTransport" type="Transport" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Transport">
<xs:sequence>
<xs:element name="Service" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Network" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Daemon" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Following is a code example for retrieving replySubject
from the TIBCO RV event generator header.
/**
* @jpd:mb-static-subscription channel-name="/Soak/reply/TibcoDataChannel" message-body="{x0}" message-metadata="{x1}"
*/
public void subscription(com.bea.data.RawData x0, com.bea.xml.XmlObject x1)
{
//#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
// input transform
// parameter assignment
this.recievedBytes = x0;
this.Header = x1;
//#END : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
TibHeaders tibHeader=TibHeadersDocument.Factory.newInstance().addNewTibHeaders();
tibHeader.set(this.Header);
String replySubject=tibHeader.getReplySubject();
}