6EAI JMS Transport

About the EAI JMS Transport Business Service

The EAI JMS Transport business service is an API for accessing enterprise messaging systems. It supports the ability to send and receive messages by way of Java Message Service (JMS) servers. JMS defines two messaging models: point-to-point (by way of JMS queues) and publish-and-subscribe (by way of JMS topics). Both are supported by the Siebel EAI JMS Transport.

JMS queues and topics are identified by their Java Naming and Directory Interface (JNDI) names. A JNDI naming service is required to use the EAI JMS Transport. It contains entries for the queues and topics used.

Invoked Business Service methods read the JNDI properties in the Siebel application framework using the classpath defined for a named subsystem and then pass the information using HTTP to the Java layer that resides in the Java Web Container server.

The API of the EAI JMS Transport is very similar to other Siebel messaging APIs such as the EAI MQSeries Server Transport and EAI MSMQ Transport.

The EAI JMS Transport is built using the Java Business Service and therefore inherits all the requirements of that business service. This includes the independent installation of a Java Virtual Machine (JVM) and the configuration of the Siebel application to identify and create the JVM.

Oracle supports integration, using the EAI JMS Transport, with any JMS provider that conforms to the JMS 1.0.2b standard. The EAI JMS Transport provides support for basic integration with both queues and topics, with message types that are specified in About JMS Message Types.

Oracle does not support any vendor extensions to the JMS standard except where specified enhanced functionality is released and documented as part of a Siebel CRM release. The EAI JMS Transport provides basic JMS 1.0.2b functionality as described in this chapter. This transport does not provide access to advanced capabilities, such as any capabilities of the JMS 1.1 standard that are not backward-compatible with JMS 1.0.2b, or provide access to any other functionality that is not described in the Siebel Bookshelf. For information about JMS standards, see:

http://www.oracle.com/technetwork/java/jms/index.html

About Synchronous and Asynchronous Invocation

Like the EAI MQSeries Server Transport, the EAI JMS Transport has two modes of execution: synchronous and asynchronous. Synchronous execution involves invoking individual methods of the JMS Transport directly, just like any other business service. Because the caller waits for the method to return, such invocation is synchronous. Asynchronous execution means listening for messages arriving on a particular queue and taking action whenever one arrives. This involves the creation of a separate Siebel component, called a JMS Receiver. Like the MQ Receiver, whenever a message arrives on the queue, the JMS Receiver dispatches to a business service (or workflow) and optionally sends a reply message.

Note: The JMS Receiver uses the EAI JMS Transport business service but cannot dispatch to a workflow that either uses this business service as one of its steps or dispatches directly to this business service. While in-process re-entrance is not supported, you can indirectly invoke the EAI JMS Transport as one of the steps out of process by calling the Synchronous Server Requests business service.

About the JMS Publish-and-Subscribe Model

The traditional message model, where a message is sent to a queue and later removed by a single receiver, is called point-to-point messaging. In addition to this familiar model, JMS also supports the publish-and-subscribe messaging model. Here, messages are published to topics, rather than sent to queues. Interested receivers subscribe to individual topics and receive a copy of each message published to the topic. To subscribe, a subscriber registers with the topic, providing a unique identifier.

For more information about the JMS publish-and-subscribe model, see:

http://www.oracle.com/technetwork/java/jms/index.html

JMS queues and topics are identified by their JNDI names. A JNDI naming service is required to use the JMS Transport. The JNDI naming service contains entries for the JMS queues (implementers of javax.jms.Queue) and topics (implementers of javax.jms.Topic) used, as well as the necessary JMS connection factories (implementers of either javax.jms.QueueFactory or javax.jms.Topic).

All methods that receive messages automatically time out if no message is available. The timeout length is three seconds by default and can be specified by the ReceiveTimeout argument.

Caution: The ReceiveTimeout must not be set to value less than or equal to 0.

Whether a call to Receive or Subscribe timed out is provided as the TimedOut property of the output property set.

Subscriptions to JMS topics are always durable subscriptions.

The term dispatch is used to refer to the operation of calling a business service or workflow, passing as input the content of a newly received message.

About Operations (Methods) of the EAI JMS Transport

The following is a summary of supported operations for use with the EAI JMS Transport:

  • Receive. Receive a message from a JMS queue.

  • ReceiveDispatch. Receive a message from a JMS queue, then dispatch.

  • ReceiveDispatchSend. Receive a message from a JMS queue, dispatch, and then send the result to a (possibly different) JMS queue.

  • Send. Send a message to a JMS queue.

  • SendReceive. Send a message to a JMS queue then receive a message from a (possibly different) JMS queue.

    The JMSCorrelationID header of the reply message must be equal to the JMSCorrelationID of the message sent, unless it is null (if none was provided as an input to SendReceive), in which case it must be the JMSMessageID of the message sent.

  • Subscribe. Receive a message from a JMS topic. The subscriber identifier must be supplied as an input to this method.

  • SubscribeDispatch. Receive a message from a JMS topic, then dispatch. The subscriber identifier must be supplied as an input to this method.

  • Publish. Publish a message to a JMS topic.

The arguments to these methods and their exact semantics (along with valid values, default values, and so on) are described in the topic Detailed Input and Output Specifications for the EAI JMS Transport. All methods require the JNDI name of JMS ConnectionFactory and the JNDI name of the queue or topic.

Features Not Supported for Use with the Siebel JMS Transport

The following features are not supported for use with the Siebel JMS Transport:

  • Message Selection. JMS has a feature called Message Selection, by which a receiver or subscriber can filter the messages it receives by specifying certain criteria. This feature is not supported by the Siebel JMS Transport.

  • Concurrency with non-JMS messaging. It is not recommended that JMS messaging be used concurrently (for a single queue) with non-JMS messaging. For example, it is not recommended that a message be sent by way of JMS and later read using native tools. JMS vendors do not typically support such usage; it can result in the appearance of additional headers or additional obscure data in the body of the message.

  • Transport Layer Security (TLS). The Siebel JMS Transport is primarily designed to support message exchange with external messaging systems (providers) using the JMS 1.0.2b standard. The JMS standard is not bound to transport layers, such as TCP/IP, and does not address transport layer-specific features, such as securing TCP/IP socket connections using TLS. For information about enabling and using TLS with the Siebel JMS Transport, contact the vendor of your JMS system. For information about the JMS 1.0.2b standard, see:

    http://www.oracle.com/technetwork/java/jms/index.html

About JMS Message Types

JMS defines five types of messages: TextMessage, BytesMessage, ObjectMessage, MapMessage, and StreamMessage. The Siebel JMS Transport supports only the types TextMessage and BytesMessage. If the JMS Transport receives an ObjectMessage, MapMessage, or StreamMessage from the JMS server, then the error Unsupported Message Type is produced.

Like all Siebel business services, the output of any method is a property set. If a BytesMessage is received, then the value of the property set has Binary type. If a TextMessage is received, then the value has String type.

Conversely, the input to any method is also a property set. For methods that involve sending or publishing a message, the type of message sent or published depends on the type of the value of the input property set. If the type is Binary, then a BytesMessage is sent and published. If the type is String, then a TextMessage is sent and published.

Note: The Siebel Business Service Simulator in Siebel Call Center always creates the input with a value type of String.

About Sending and Receiving XML

Messages whose content is XML are generally best treated as binary data and sent as BytesMessages. For example, the output of the Siebel business service EAI XML Converter is binary; therefore, if this is passed as the input to Send, then a BytesMessage is sent.

If XML is sent as a TextMessage, then the characters are encoded as UTF-16. Therefore, the XML document declares its encoding to be UTF-16.

Typically, when a message containing an XML document is received by the Siebel application, it is desirable to convert the document to a property set representation before processing it. This is accomplished automatically during the Dispatch step by specifying the ConverterService argument to be either XML Converter or EAI XML Converter. For more details about these converter services see XML Reference: Siebel Enterprise Application Integration.

About Multistep Operations Within a JMS Session

All JMS operations are performed in the context of a transactional JMS QueueSession. If a send or receive operation throws an exception, then the session is immediately rolled back. If the operation is successful, then the session is committed, unless the operation is part of a larger multistep operation. In the case of multistep operations, the transaction is handled as follows:

  • SendReceive. If the send operation succeeds, then the JMS session is committed and a receive operation is performed. This is necessary because the receive operation might depend on a response to the first message.

  • ReceiveDispatch. If the receive operation fails, then the JMS session is rolled back, and the dispatch operation is not attempted. If the receive operation succeeds, then the dispatch operation is attempted. If the dispatch succeeds, then the JMS session is committed; otherwise, both the Siebel transaction and the JMS session are rolled back.

  • SubscribeDispatch. Same as ReceiveDispatch.

  • ReceiveDispatchSend. If the receive operation fails, then the JMS session is rolled back, and further operations are not attempted. If the receive operation succeeds, then the dispatch operation is attempted. If the dispatch operation fails, then the JMS session and the Siebel transaction are rolled back; otherwise, the send operation is attempted. If the send operation fails, then the JMS session and the Siebel transaction are rolled back; otherwise, both are committed.

Each Dispatch operation is performed within a Siebel transaction.

Note: Do not attempt ReceiveDispatch and ReceiveDispatchSend operations from within an existing Siebel transaction, as nested transactions are not supported.

Also, as with all Siebel EAI receivers, if an operation fails during the execution of the JMS Receiver, then the JMS Receiver component terminates. (A timeout is not a failure.)

About Undeliverable Messages in JMS Transport

If a message is undeliverable, in the sense that repeated attempts by the Siebel JMS Transport to receive the message fail, then the message must be removed from the queue. Most JMS vendors provide some mechanism for dealing with such “poison messages” Oracle WebLogic, for example, can be configured to limit the number of times it attempts to deliver a message before redirecting the message to an error queue or deleting the message altogether.

Detailed Input and Output Specifications for the EAI JMS Transport

This topic provides detailed information about the exact semantics of all input arguments and output values for each method of the EAI JMS Transport.

The following topics are discussed:

    JMS Headers and Properties

    Every JMS message has a set of standard headers. Some of these headers can be specified as arguments to the methods of the JMS Transport that involve sending or publishing, and some are available as properties of the output property set of methods that involve receiving or subscribing. These are detailed in the tables in Input Arguments Used by the Dispatch Step, Input Argument Values, and About the Output of the JMS Transport.

    A JMS message can also be assigned properties. These might be user-defined properties specific to a particular application, or JMS-defined properties (for example JMSXProducerTXID) that are optionally supported by the JMS vendor. A property can be an instance of any Java class or any of the primitive Java types. All properties of a message received by the Siebel JMS Transport are available as properties of the output property set.

    The name of the property is the original name with the eleven characters SIEBEL_JMS: prefixed; the value is the string obtained by converting the original value to a Java String. Conversely, when a message is sent, any property of the input property set whose name begins with SIEBEL_JMS: is added to the message as a JMS Message string property with the prefix SIEBEL_JMS: removed. For example, the property SIEBEL_JMS:foo is added to the message as the string property foo.

      Input Arguments Used by the Dispatch Step

      The following table shows the options for each input argument of the JMS Transport methods, except the user-defined properties and arguments used by the Dispatch step. R denotes a required argument; NR denotes an optional argument (not required); and I denotes an argument that is ignored. Notes following the table provide further explanation for particular values.

      Input Argument

      Send

      Publish

      Send Receive

      Receive

      Subscribe

      Receive Dispatch

      Receive Dispatch Send

      Subscribe Dispatch

      ConnectionFactory

      R

      R

      R

      R

      R

      R

      R

      R

      ReceiveQueue

      I

      I

      R

      R

      I

      R

      R

      I

      ReceiveTimeout

      I

      I

      NR

      NR

      NR

      NR

      NR

      NR

      SendQueue

      R

      I

      R

      I

      I

      I

      R

      I

      Topic

      I

      R

      I

      I

      R

      I

      I

      R

      ConnectionUsername

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      ConnectionPassword

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      SendUsername

      NR

      I

      NR

      I

      I

      NR

      I

      I

      SendPassword

      NR

      I

      NR

      I

      I

      NR

      I

      I

      ReceiveUsername

      I

      I

      NR

      I

      I

      I

      NR

      I

      ReceivePassword

      I

      I

      NR

      I

      I

      I

      NR

      I

      TopicUsername

      I

      NR

      I

      I

      NR

      I

      I

      NR

      TopicPassword

      I

      NR

      I

      I

      NR

      I

      I

      NR

      SubscriberIdentifier

      I

      I

      I

      I

      R

      I

      I

      R

      JMS Headers

      JMSPriority

      NR

      NR

      NR

      I

      I

      I

      NR 2

      I

      JMSDeliveryMode

      NR

      NR

      NR

      I

      I

      I

      NR 2

      I

      JMSExpiration

      NR

      NR

      NR

      I

      I

      I

      NR 2

      I

      JMSReplyTo

      NR

      NR

      I

      I

      I

      I

      NR 2

      I

      JMSType

      NR

      NR

      NR

      I

      I

      I

      NR 2

      I

      JMSCorrelationID

      NR

      NR

      NR

      I

      I

      I

      I

      I

      Dispatch

      Connection Subsystem

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      NR

      DataHandling Subsystem

      I

      I

      I

      I

      I

      NR

      NR

      NR

      DispatchService

      I

      I

      I

      I

      I

      R

      R

      R

      DispatchMethod

      I

      I

      I

      I

      I

      R

      R

      R

      DispatchWorkflow Process

      I

      I

      I

      I

      I

      R

      R

      R

      DispatchRuleSet

      I

      I

      I

      I

      I

      R

      R

      R

      ConverterService

      I

      I

      I

      I

      I

      NR

      NR

      NR

      Some special notes regarding particular values in the previous table:

      • When the JMSReplyTo header is used, the SendQueue value is ignored.

      • When the JMSPriority, JMSDeliveryMode, JMSExpiration, JMSReplyTo, or JMSType header is used, these values are assigned to the reply message during the Send step.

      • The JMSReplyTo header of the sent message is set to the value of the ReceiveQueue argument.

      • The JMSCorrelationID header of the reply message cannot be set directly. The JMSCorrelationID of the reply message is set to the JMSCorrelationID of the received message, unless empty, in which case it is set to its JMSMessageID.

      • For DispatchService, DispatchMethod, DispatchWorkflowProcess, and DispatchRuleSet method arguments, one of the following three combinations is required:

        • (DispatchService && DispatchMethod)

        • DispatchWorkflowProcess

        • DispatchRuleSet

      • The ConnectionUsername and ConnectionPassword input parameters apply to IBM WebSphere MQ only.

        Note: When sending messages to IBM WebSphere MQ, ConnectionUsername and ConnectionPassword are required for the Windows 2012 Server platform and recommended for all other Windows platforms.
      • The SendUsername, SendPassword, ReceiveUsername, ReceivePassword, TopicUsername, and TopicPassword input parameters apply to Oracle WebLogic only.

      • The JMSType and JMSCorrelationID input arguments can also be used as output arguments.

      • For the ConnectionSubsystem input argument, a subsystem can be provided instead of the connection parameters. However, it must contain the same required method arguments as used for the connection parameters.

      • For the DataHandlingSubsystem input argument, a subsystem can be provided instead of the dispatch parameters. However, it must contain the same required method arguments as used for the dispatch parameters.

      • The ConverterService input argument is used to process the output of the received message before dispatching.

      In place of providing the arguments individually, the single argument ConnectionSubsystem can be provided. Its value must be the name of a valid named subsystem of type JMSSubsys, and it must include all of the arguments that are required by the method to which it is passed. See About the JMS Receiver for more information about that named subsystem.

      JMS message properties are also supported as input arguments (properties) as described in JMS Headers and Properties.

        Input Argument Values

        The following table provides details for each input argument about the allowable values, default values, and special values, as well as the behavior if an invalid value is passed.

        Input Default Allowable Values Special Values If Value Invalid

        ConnectionFactory

        NONE

        JNDI connection factory name

        Not applicable

        ERROR

        ReceiveQueue

        NONE

        JNDI queue name

        Not applicable

        ERROR

        ReceiveTimeout

        3000

        Any integer greater than to 0

        Caution: Be careful NOT to set the value less than or equal to 0.

        Not applicable

        Noninteger defaults to 3000

        ConnectionUsername

        NONE

        Valid username

        Not applicable

        Not applicable

        ConnectionPassword

        NONE

        Valid password

        Not applicable

        Not applicable

        SendQueue

        NONE

        JNDI queue name

        Not applicable

        ERROR

        SendUsername

        NONE

        Valid username

        Not applicable

        Not applicable

        SendPassword

        NONE

        Valid password

        Not applicable

        Not applicable

        ReceiveUsername

        NONE

        Valid username

        Not applicable

        Not applicable

        ReceivePassword

        NONE

        Valid password

        Not applicable

        Not applicable

        TopicUsername

        NONE

        Valid username

        Not applicable

        Not applicable

        TopicPassword

        NONE

        Valid password

        Not applicable

        Not applicable

        Topic

        NONE

        JNDI topic name

        Not applicable

        ERROR

        SubscriberIdentifier

        NONE

        ANY STRING

        Not applicable

        Not applicable

        JMS Headers

        JMSCorrelationID

        NOT SET

        ANY STRING

        Not applicable

        Not applicable

        JMSPriority

        javax.jms.Message. DEFAULT_PRIORITY (4)

        Any integer from 0 to 9

        (0 lowest; 9 highest)

        DEFAULT

        JMSDeliveryMode

        javax.jms.Delivery Mode.PERSISTENT

        PERSISTENT, NON_PERSISTENT

        Not applicable

        DEFAULT

        JMSExpiration

        javax.jms.Message. DEFAULT_TIME_TO_ LIVE (0)

        Any nonnegative integer

        0: Message never expires

        DEFAULT

        JMSReplyTo

        NOT SET

        JNDI queue name

        Not applicable

        ERROR

        JMSType

        SiebelJMSMessage

        ANY STRING

        Not applicable

        Not applicable

        Dispatch

        ConnectionSubsystem

        NONE

        A JMSSubsys named subsystem

        Not applicable

        ERROR

        DataHandlingSub system

        NONE

        An EAITransportData HandlingSubsys named subsystem

        Not applicable

        ERROR

        DispatchService

        NONE

        Business service name

        Not applicable

        ERROR

        DispatchMethod

        NONE

        Business service method

        Not applicable

        ERROR

        DispatchWorkflow Process

        NONE

        Workflow name

        Not applicable

        ERROR

        DispatchRuleSet

        NONE

        Rule set name

        Not applicable

        ERROR

        ConverterService

        NONE

        Business service name

        Not applicable

        ERROR

          About the Output of the JMS Transport

          The output of the JMS Transport methods includes the following parts:

          • The content of the received message (if the method involves receiving a message). See the previous topic, Input Arguments Used by the Dispatch Step, for details about typing.

          • JMS properties of the received message (if the method involves receiving a message), as described in the topic JMS Headers and Properties.

          • Certain JMS headers of the message sent or received, as described in the following table.

          • The special properties TimedOut (if the method involves receiving a message) and DispatchError (if the method involves dispatching), as described in the following table. Each property is either True or False.

          The following table enumerates for each method of JMS Transport the JMS headers and other distinguished properties that appear as properties of the output property set of the method. Yes means the argument is present; No means the argument is absent.

          Output

          Send

          Publish

          Send Receive

          Receive

          Subscribe

          Receive Dispatch

          Receive Dispatch Send

          Subscribe Dispatch

          TimedOut

          No

          No

          Yes

          Yes

          Yes

          Yes

          Yes

          Yes

          JMSType +

          No

          No

          Yes

          Yes

          Yes

          Yes

          No

          Yes

          JMSCorrelation ID+

          No

          No

          Yes

          Yes

          Yes

          Yes

          No

          Yes

          JMSRedelivered

          No

          No

          Yes

          Yes

          Yes

          Yes

          No

          Yes

          JMSTimestamp

          No

          No

          Yes

          Yes

          Yes

          Yes

          No

          Yes

          JMSMessageID

          Yes 1

          Yes 1

          Yes 2

          Yes 2

          Yes 2

          Yes

          Yes 1

          Yes

          DispatchError

          No

          No

          No

          No

          No

          Yes

          Yes

          Yes

          Some special notes regarding the information in this table:

          • Yes1: JMSMessageID, the value assigned by the JMS server of the sent (or published) message.

          • Yes2: JMSMessageID, the value assigned by the JMS server of the received (or subscribed) message.

          • +: An output argument that can also be used as an input argument.

          All other message properties (user-defined; not JMS headers) are provided as output properties with SIEBEL_JMS: prefixed to the original property name, and the value is converted to a String.

          For the multistep methods ReceiveDispatch, ReceiveDispatchSend, and SubscribeDispatch, properties are passed between the individual steps according to the following rules:

          • All outputs of the Receive (or Subscribe) step are passed as inputs to the subsequent Dispatch step.

          • In the case of an error during the Dispatch step, its output is returned.

          • The input to the Dispatch step includes all properties in the original input as well as properties returned by the Receive (or Subscribe) step.

            Configuring the EAI JMS Transport

            The EAI JMS Transport is built using the Java Business Service and therefore inherits all the requirements of that business service. This includes the independent installation of a Java Virtual Machine (JVM) and the configuration of the Siebel application to identify and create the VM. Configuration of the Siebel application requires creating a named subsystem of type JVMSubSys with the necessary properties. Refer to the Java Business Service documentation for instructions on how to configure the JVM named subsystem.

            The EAI JMS Transport requires that the CLASSPATH property of the JVM subsystem include the following packages or classes:

            • Siebel.jar

            • SiebelJI_lang.jar (where lang corresponds to the default language for your installation)

            • A directory containing the location of the jndi.properties file

              The jndi.properties file contains the necessary name value pairs required to perform a JNDI lookup and bind to the remote queue.

            • Necessary classes and JAR files as required by the JMS provider.

            Note: You can have only one JVM loaded in a process, and therefore only one JVM subsystem in a process. If you try to load more than one JVM subsystem into a process, then an error occurs.

            If you want multiple JVM subsystems, then you must configure additional components. For example, you can have EAIObjMgr_WL pointing to a JVM subsystem called JAVA_WL and EAIObjMgr_ORACLE pointing to a JVM subsystem called JAVA_ORACLE.

            To verify that the CLASSPATH and jndi.properties are properly configured, see Troubleshooting for the JMS Transport.

            The following JMS Transport configuration topics are also discussed here:

              About the JMSSubsys Named Subsystem

              The arguments to any method of JMS Transport can be supplied individually as properties of the input property set or as part of a named 32-bit subsystem of type JMSSubsys. When invoking the JMS Transport asynchronously by starting a JMS Receiver component, the arguments must be supplied by way of a named subsystem.

              This subsystem supplies all of the necessary parameters for any one of these three methods: ReceiveDispatch, ReceiveDispatchSend, or SubscribeDispatch. The parameters for the three methods are ConnectionFactory, ReceiveQueue, SendQueue, Topic, SubscriberIdentifier, ReceiveTimeout, JMSType, JMSPriority, JMSExpiration, and JMSDeliveryMode.

              In addition, this subsystem has a property JVMSubsys, which can be given the name of the JVM subsystem instance to use. The default value is JAVA. Therefore, if the property JVMSubsys is not explicitly given a value, then there must be a properly configured instance of the type JVMSubSys named JAVA.

                About the JavaContainerSubsys Named Subsystem

                The arguments to any method of JMS Transport can be supplied individually as properties of the input property set or as part of a named 64-bit subsystem of type JavaContainerSubsys. When invoking the JMS Transport asynchronously by starting a JMS Receiver component, the arguments must be supplied by way of a named subsystem.

                This subsystem supplies all of the necessary parameters for any one of these three methods: ReceiveDispatch, ReceiveDispatchSend, or SubscribeDispatch. The parameters for the three methods are CONTAINERURL and CLASSPATH.

                For more information about configuring the JavaContainerSubsys subsystem, see Creating a 64-bit Java Subsystem by Using the Siebel Server Manager and Creating a 64-bit Java Subsystem by Using the Siebel Web Client.

                  About the JMS Receiver

                  The JMS Receiver (alias EAIJMSRcvr) is a Siebel Server component that makes it possible for the JMS Transport to be invoked asynchronously. The JMS Receiver:

                  • Listens for messages arriving on a JMS queue or topic and takes action whenever a message arrives.

                  • Repeatedly invokes a single method of the JMS Transport: ReceiveDispatch, ReceiveDispatchSend, or SubscribeDispatch.

                  • Takes a message from the queue and dispatches it to the corresponding workflow or business service for execution. If execution is successful, then the message is committed to the queue. If there is an error, then the message is rolled back to the queue.

                  • Uses AUTO_ACKNOWLEDGE mode. In AUTO_ACKNOWLEDGE mode, the session automatically acknowledges the receipt of a message when it has either successfully returned from a call to receive or the message listener it has called to process the message successfully returns.

                    About Multithreading in the JMS Receiver Component

                    The JMS Receiver is multithreaded and operates in batch mode. (In some previous versions, this component was single-threaded and ran in the background.)

                    A task for the JMS Receiver component starts automatically when the Siebel Server is started, where Default Tasks (alias DfltTasks) is set to 1. Otherwise, you must start tasks manually. For more information about DfltTasks, see Siebel System Administration Guide.

                    When a JMS Receiver task is started, a main task and several worker threads are created, whose number depends on the MinWorkQThreads and MaxWorkQThreads parameters listed in the following table.

                    After the worker threads are created, the main task thread starts calling the specified method on the EAI JMS Transport business service in an infinite loop, until a shutdown component is signaled. At the same time, the worker threads start their own infinite loop and perform the same duties as the main thread: they call the specified method on the EAI JMS Transport business service.

                    In effect, the ReceiveDispatchSend operation (or any method specified) is now called by multiple threads in the same task. Previously, a single sequential call to the ReceiveDispatchSend method was made in a single process. Now, the same operation happens in parallel. The thread parallelism effectively increases scalability while limiting CPU load and memory utilization.

                    Parameter Description

                    MaxTasks

                    Total number of tasks that can run concurrently on a Siebel Application Object Manager. For more information about MaxTasks, see Siebel Performance Tuning Guide.

                    MaxMTServers

                    Maximum number of multithreaded processes that can run concurrently on a Siebel Application Object Manager. For more information about MaxMTServers, see Siebel Performance Tuning Guide.

                    MinMTServers

                    Minimum number of multithreaded processes that can run concurrently on a Siebel Application Object Manager. For more information about MinMTServers, see Siebel Performance Tuning Guide.

                    MaxWorkQThreads

                    Maximum number of worker threads in a process. The default is 4.

                    MinWorkQThreads

                    Minimum number of worker threads in a process. The default is 4.

                    MaxWorkQLength

                    Maximum number of work items handled by a worker thread. The default is 20.

                    Considerations When Using Multithreading

                    Multithreading works best when messages are atomic; that is, their processing does not depend on the processing of other messages. The messages can be processed in parallel without conflicts.

                    If one message is dependent on another, then the messages must be processed in the correct order. For example, you must create an account before creating a service request for it, and create an order before adding an order line item.

                    You can use validation scripting to make sure that parents are created before children. However, creating a data architecture that does not require additional scripting will deliver a performance benefit to the end-to-end solution.

                      About Configuring the JMS Receiver

                      An instance of the JMS Receiver is configured with the parameters of a JMSSubsys named subsystem, which specify the queue or topic to listen to, and the action to be taken.

                      The JMSReceiver task has the following three parts:

                      • ReceiverConnectionSubsystem is the named subsystem.

                      • ReceiverDataHandlingSubsystem dispatches the message from the ReceiveQueue to the workflow previously defined.

                      • ReceiverMethodName is the EAI JMS Transport business service method invoked.

                      The following is an example of how an instance of the JMS Receiver can be configured and run by using the Siebel Server Manager command-line interface:

                      create named subsystem MyJMSConnSubsys_SR for subsystem JMSSubsys with
                      ConnectionFactory="weblogic.examples.jms.QueueConnectionFactory",
                      ReceiveQueue="weblogic.examples.jms.exampleQueueReceive",
                      SendQueue="weblogic.examples.jms.exampleQueueSend",
                      ReceiveTimeout=3000
                      
                      create named subsystem SiebelEcho for subsystem EAITransportDataHandlingSubsys with
                      DispatchService="Workflow Utilities",
                      DispatchMethod="ECHO"
                      
                      start task for comp JMSReceiver with
                      ReceiverConnectionSubsystem=MyJMSConnSubsys_SR,
                      ReceiverDataHandlingSubsystem=SiebelEcho,
                      ReceiverMethodName=ReceiveDispatchSend
                      

                      For a detailed workflow example using a JMS Receiver, see Receiving, Dispatching, and Sending JMS Messages. For a discussion of named subsystems for Siebel EAI, see EAI Transports and Interfaces Overview For more information about administering named subsystems, see Siebel System Administration Guide.

                        About Reconnecting to the External JMS Queue

                        If the external system is not ready to receive messages, then the JMS Receiver component fails when it attempts to connect. To avoid this failure, two new parameters have been added to the JMS Receiver: CompMaxRetries and CompRetryInterval. You can set these parameters as needed.

                        The reconnection parameters for the JMS Receiver are described in the following table.

                        Table Reconnection Parameters for the JMS Receiver Component

                        Parameter Default Value Description

                        CompMaxRetries

                        10

                        Specifies the number of times the reconnection is attempted. Valid values are positive integers.

                        CompRetryInterval

                        60

                        Specifies the interval in seconds between each retry. Valid values are positive integers.

                        These parameters are used with the AutoRestart and NumRestart parameters. AutoRestart enables restart attempts when set to TRUE. NumRestart determines how many attempts are made to restart the JMS Receiver task if it fails.

                        CompMaxRetries and CompRetryInterval control reconnection attempts to the JMS queue to avoid JMS Receiver failure. AutoRestart and NumRestart are used when the JMS Receiver task ends with an error unrelated to losing the queue connectivity. For more information about NumRestart and AutoRestart, see Siebel System Administration Guide.

                          Creating a JMS Subsystem by Using the Siebel Web Client

                          The following is an alternative procedure for creating a JMS Subsystem by using the Siebel Web Client and then configuring the JMS Transport.

                          To configure the JMS Transport by using the Siebel Web Client

                          1. In the Siebel client, navigate to the Administration - Server Configuration screen, Enterprises view.

                          2. In the first list applet, select the Enterprise Server that you want to configure.

                          3. In the middle applet, click the Profile Configuration tab.

                          4. Click New to create a new component profile and set the following parameters:

                            Name Value

                            Profile

                            JMS_Q1ReceiveDispatchSend

                            Alias

                            JMS_Q1ReceiveDispatchSend

                            Subsystem Type

                            JMSSubsys

                          5. In the Profile Parameters list applet (the last applet), specify the parameters required for the type of operations the subsystem will support (for example, Receive or ReceiveDispatchSend).

                            For example, if this subsystem needed to support the ReceiveDispatchSend operation, then at least the following values must be set:

                            Name Value

                            ConnectionFactory

                            examples.jms.QueueConnectionFactory

                            JVM Subsystem

                            JAVA

                            ReceiveQueue

                            examples.jms.fromSiebel

                            SendQueue

                            examples.jms.toSiebel

                            Receive Timeout

                            1000

                            Sending and Receiving JMS Messages

                            The following procedure describes how to set up the Siebel application to send a message to an external system using the EAI JMS Transport and receive a corresponding reply from the external system.

                            To send and receive messages with the JMS Transport

                            1. Set up a JMS queue to receive messages from the Siebel application and give the queue an easy-to-identify name, such as fromSiebel.

                              Refer to your JMS provider documentation on how to administer, monitor, and define new persistent queues.

                            2. Set up a JMS queue to send messages to the Siebel application.

                              Refer to your JMS provider documentation on how to administer, monitor and define new persistent queues.

                              1. Give the queue an easy-to-identify name, such as toSiebel.

                              2. Create a message in the queue.

                              Note: To test this scenario adequately, you must have a partner application that can place a valid message for the Siebel application into the queue.
                            3. Set up a workflow in Siebel Tools to send a message out and receive a message back in response using the EAI JMS Transport. The workflow should contain the following steps, as shown in the following image:

                              1. Siebel Order (Query by ID)

                              2. EAI XML Converter (IntObjHierToXMLDoc)

                              3. EAI JMS Transport (SendReceive)

                              4. EAI XML Converter (XMLDocToIntObjHier)

                              5. Siebel Order (Synchronize)


                              Workflow for sending a message out and receiving a message in response using the EAI JMS Transport. This image is described in the surrounding text.
                              Note: For details on the Business Process Designer, see Siebel Business Process Framework: Workflow Guide.
                            4. Create the following process properties:

                              Name Data Type In/Out Default String Comments

                              OrderXML

                              Binary

                              In

                              Not applicable

                              Not applicable

                              JMSConnectionFactory

                              String

                              In

                              examples.jms. ConnectionFactory

                              JNDI name of the JMS connection factory

                              JMSReceiveQueue

                              String

                              In

                              examples.jms.toSiebel

                              JNDI name of the queue

                              JMSSendQueue

                              String

                              In

                              examples.jms.fromSiebel

                              JNDI name of the queue

                              JMSReceiveTimeout

                              String

                              In

                              180000

                              Not applicable

                              Order Message

                              Integration Object

                              In

                              Not applicable

                              Not applicable

                            5. Set up the first step of the workflow to use the Siebel Order ASI with the QueryById method to query the information from the Siebel database using the following input and output arguments:

                              Input Argument Type Property Name

                              PrimaryRowId

                              Process Property

                              Object Id

                              Property Name Type Output Argument

                              Order Message

                              Output Argument

                              SiebelMessage

                            6. Set up the second step of the workflow to use the EAI XML Converter with the IntObjHierToXMLDoc method to convert the data extracted from the Siebel database to XML using the following input and output arguments:

                              Input Argument Type Value Property Name

                              GenerateProcessingInstructions

                              Literal

                              False

                              Not applicable

                              SiebelMessage

                              Process Property

                              Not applicable

                              Order Message

                              Property Name Type Output Argument

                              OrderXML

                              Output Argument

                              <Value>

                            7. Set up the third step of the workflow, after Start, to use the EAI JMS Transport with the SendReceive method using the following input and output arguments:

                              Input Argument Type Property Name

                              <Value>

                              Process Property

                              OrderXML

                              ConnectionFactory

                              Process Property

                              JMSConnectionFactory

                              ReceiveQueue

                              Process Property

                              JMSReceiveQueue

                              ReceiveTimeout

                              Process Property

                              JMSReceiveTimeout

                              SendQueue

                              Process Property

                              JMSSendQueue

                              Property Name Type Output Argument

                              OrderXML

                              Output Argument

                              <Value>

                            8. Set up the fourth step to use the EAI XML Converter with the XMLDocToIntObjHier method to convert the XML message to an Integration Object using the following input and output arguments:

                              Input Argument Type Property Name

                              <Value>

                              Process Property

                              OrderXML

                              Property Name Type Output Argument

                              Order Message

                              Output Argument

                              SiebelMessage

                            9. Set up the last step to use the Siebel Order ASI with the Synchronize message to update the Siebel database using the following input and output arguments:

                              Input Argument Type Property Name

                              SiebelMessage

                              Process Property

                              Order Message

                              Property Name Type Output Argument

                              Order Message

                              Output Argument

                              SiebelMessage

                            10. Save and deploy the workflow.

                              It is recommended that the Workflow Simulator be used for testing purposes.

                              Note: To test this scenario adequately, you must have a partner application that can accept the message and return a response. The correlation ID of the response message must be set to the message ID of the message originally sent by the Siebel application.

                            Receiving, Dispatching, and Sending JMS Messages

                            The procedure in this section describes how to set up your system to receive inbound messages from JMS, perform an action within the Siebel application based upon the message, and send a synchronous response back to the external system.

                            To receive, dispatch, and send messages using EAI JMS Transport

                            1. Set up a JMS queue to receive messages from the Siebel application and give the queue an easy to identify name, such as fromSiebel.

                              Refer to your JMS provider documentation on how to administer, monitor, and define new persistent queues.

                            2. Set up a JMS queue to send messages to the Siebel application.

                              Refer to your JMS provider documentation on how to administer, monitor and define new persistent queues.

                              1. Give the queue an easy-to-identify name such as toSiebel.

                              2. Create a message in the queue.

                              Note: To test this scenario adequately, you must have a partner application that can place a valid message for the Siebel application into the queue.
                            3. Set up a workflow in Siebel Tools to process the incoming XML request. The workflow should contain the following steps, as shown in the following image:

                              1. EAI XML Convert (XMLDocToIntObjHier): Receives an incoming XML document and converts it to an integration object.

                              2. Siebel Order ASI (QueryByExample): Executes a query using Siebel Order application service.

                              3. EAI XML Converter (IntObjHierToXMLDoc): Converts the response to an XML document.


                              Workflow to process the incoming XML request: This image is described in the surrounding text.
                              Note: For details on the Business Process Designer, see Siebel Business Process Framework: Workflow Guide.
                            4. Create the following process properties:

                              Name Data Type In/Out Default String Comments

                              <Value>

                              Binary

                              In/Out

                              <Value>

                              Order Integration Object

                              Order Message

                              Hierarchy

                              In/Out

                              Not applicable

                              XML representation of the integration object

                            5. Set up the first step of the workflow, after Start, to use the EAI XML Converter with the XMLDocToIntObjHier method.

                              This step converts the incoming XML document to an integration object representation using the following input and output arguments:

                              Input Argument Type Property Name

                              <Value>

                              Process Property

                              <Value>

                              Property Name Type Output Argument

                              Order Message

                              Output Argument

                              SiebelMessage

                            6. Set up the second step to use the Siebel Order ASI with the QueryByExample method.

                              This step queries the Order business object based upon the provided XML document using the following input and output arguments:

                              Input Argument Type Property Name

                              SiebelMessage

                              Process Property

                              Order Message

                              Property Name Type Output Argument

                              Order Message

                              Output Argument

                              SiebelMessage

                            7. Set up the third step to use the EAI XML Converter with the IntObjHierToXMLDoc method.

                              This step converts the integration object to a well-formed XML document using the following input and output arguments:

                              Input Argument Type Property Name

                              SiebelMessage

                              Process Property

                              Order Message

                              Property Name Type Output Argument

                              <Value>

                              Output Argument

                              <Value>

                            8. Save and deploy the workflow.

                              For details on deploying workflows, see Siebel Business Process Framework: Workflow Guide.

                            9. Define a JMS Connection subsystem using SrvrMgr (command line utility) or the Server Administration screen.

                              Note: Restart the Siebel Server to make the new subsystem available.

                              Following is an example using SrvrMgr:

                              Note: ConnectionFactory, ReceiveQueue and SendQueue require JNDI names, which varies depending upon the JMS provider and your implementation.
                              create named subsystem JMSToFromSiebel for subsystem JMSSubsys with 
                              ConnectionFactory="jndiName.ConnectionFactory", 
                              ReceiveQueue="jndiName.toSiebel ", 
                              SendQueue="jndiName.fromSiebel",
                              ReceiveTimeout=3000
                              
                            10. Define a data handling subsystem to dispatch the message from the toSiebel queue to the workflow as previously defined (JMS Query Order):

                              create named subsystem QueryOrder for subsystem EAITransportDataHandlingSubsys 
                              with DispatchWorkflowProcess="JMS Query Order"
                              
                              Note: The Siebel Server must be restarted in order for the data handling subsystem to be available.
                            11. After restarting the Siebel Server, start a new JMS Receiver from the SrvrMgr command line.

                              The following is an example that instructs the receiver to use the JMSToFromSiebel connection subsystem defined in Step 9, the QueryOrder data handling subsystem defined in Step 10, and instructs the receiver to use the ReceiveDispatchSend method of the EAI JMS Transport:

                              start task for comp JMSReceiver with 
                              ReceiverConnectionSubsystem= JMSToFromSiebel,
                              ReceiverDataHandlingSubsystem=QueryOrder,
                              ReceiverMethodName=ReceiveDispatchSend
                              
                            12. Place a message resembling the following on the toSiebel queue:

                              Note: A third-party product such as Hermes (available from Sourceforge.net) is required to place a message on a queue. In the following sample document, the Siebel Order ASI queries for all orders associated with the Hibbings Manufacturing account.
                              <?xml version="1.0" encoding="UTF-16"?>
                              <SiebelMessage IntObjectName="Order Interface">
                                 <ListOfOrderInterface>
                                    <Orders>
                                       <Account>Hibbings Manufacturing</Account>
                                    </Orders>
                                 </ListOfOrderInterface>
                              </SiebelMessage>
                              

                            Sending and Receiving Custom JMS Properties

                            Properties can be assigned to a JMS message. A property can be an instance of any Java class or any of the primitive Java types. All properties of a message received by the Siebel JMS Transport are available as properties of the output property set. The Siebel EAI infrastructure can send and receive custom JMS properties without having to write custom code.

                            The name of a custom property is the original name with the eleven characters SIEBEL_JMS: prefixed; the value is the string obtained by converting the original value to a Java String object. When sending a message, any property of the input property set whose name begins with SIEBEL_JMS: is added to the message being sent as a JMS Message string property with the prefix SIEBEL_JMS: removed. For example, the property SIEBEL_JMS:foo is added to the message as the string property foo.

                              Receiving Custom Properties in Inbound Messages

                              Inbound messages are received through the JMS Receiver component (ReceiveDispatchSend or ReceiveDispatch method). This component is usually configured to dispatch the message to a workflow process.

                              To receive a custom JMS property in a workflow process

                              1. Create a workflow process property as follows:

                                Name Data Type In/Out

                                SIEBEL_JMS:name

                                String

                                In/Out

                                Note: There is no space between the colon and the custom property name.
                              2. Repeat the previous step for every custom JMS property that is expected to be received and processed.

                                At run time, the Siebel EAI infrastructure automatically copies the value of the correct JMS property from the received message to the appropriate Workflow process property.

                                For example, to have two JMS properties called TLFXUserId and TLFXGroupId available to a workflow process, you must define two process properties called SIEBEL_JMS:TLFXUserId and SIEBEL_JMS:TLFXGroupId.

                                The workflow process can also set the values of the JMS properties using a step that calls the Workflow Utilities business service (Echo method) as shown in the following example:

                                Input Argument Type Value

                                SOV_Group

                                Expression

                                “SOV_Group”

                                SOV_User

                                Expression

                                “SOV_User”

                                Property Name Type Output Argument

                                SIEBEL_JMS:TLFXGroupId

                                Output Argument

                                SOV_Group

                                SIEBEL_JMS:TLFXUserId

                                Output Argument

                                SOV_User

                                An input argument (SOV_Group and SOV_User in the example) can be any string, with the requirement that the same string must be used as the output argument.

                                Because the process properties are defined as In/Out, they are passed back to the caller (the JMS Receiver in this case). The JMS Transport includes them in the output message as JMS properties.

                                For more information about creating workflow processes, see Siebel Business Process Framework: Workflow Guide.

                                Sending Custom Properties in Outbound Messages

                                In the standard application, outbound messages are sent to the JMS queue using the EAI JMS Transport business service (Send and SendReceive methods).

                                The standard BS though does not have the ability to set custom JMS properties, but it is extremely easy to create a new clone of the EAI JMS Transport BS to handle those.

                                To set custom JMS properties in outbound messages

                                1. In Siebel Tools, create and open a workspace.

                                2. Copy the EAI JMS Transport business service, then give the copy a new name and display name, such as My EAI JMS Clone.

                                3. In the new business service, add business service method arguments to the Send method as follows:

                                  Name Data Type Type

                                  SIEBEL_JMS:name

                                  String

                                  Input

                                4. Repeat the previous step for the SendReceive method, but enter Input / Output for the Type property.

                                  Using Input / Output as the Type is necessary if the external system modifies the JMS properties and the new values are read into the Siebel application.

                                5. Deliver the workspace.

                                The new business service can be used in any workflow process. You can pick the custom JMS properties as input argument names when defining workflow steps, and the custom JMS properties are added to the JMS message. For more information about creating workflow processes, see Siebel Business Process Framework: Workflow Guide. For more information about business services, see Integration Platform Technologies: Siebel Enterprise Application Integration.

                                  Enabling Authentication and Authorization for the EAI JMS Transport

                                  Authentication and authorization can be configured on JMS servers to protect JMS destinations. Oracle supports the following scenarios for use in the Siebel application:

                                  • Require username and password to perform a JNDI lookup.

                                  • Require username and password to create connections to the JMS server.

                                  • Require username and password to send, receive, publish, subscribe from, or subscribe to JMS destinations that have the authorization enforced by a JMS server.

                                  The responsibility of the Siebel EAI JMS Transport business service as a JMS client is twofold:

                                  • Provides configuration mechanism and read credentials from the Siebel application configuration file.

                                  • Establishes proper security context for executing privileged operations.

                                  The following authentication and authorization topics are also discussed:

                                    About JMS Credential Specification

                                    The following method arguments are added to the EAI JMS Transport business service methods to use when completing the JMS credential specification:

                                    Send and receive credentials are specified separately because some JMS business service methods (SendReceive and ReceiveDispatchSend) contain both send and receive operations, and it is possible that SendQueue and ReceiveQueue are protected by different credentials.

                                      Configuring Credentials in JNDI

                                      JNDI credentials are specified in the jndi.properties file by setting java.naming.security.principal to the username and java.naming.security.credentials to the password. For more details, refer to the JNDI specification. The construction of the naming context automatically reads the credentials from the jndi.properties file and uses those credentials to connect to a JNDI server if authentication is required to perform JNDI lookup.

                                      For security reasons, Siebel CRM requires that the value of java.naming.security.credentials (representing the JNDI password) in the jndi.properties file be encrypted. The JNDIEncryptionCheck parameter in the JMSSubsys named subsystem is set to TRUE by default to enforce the encryption requirement. In this case, Siebel CRM decrypts the encrypted value of java.naming.security.credentials.

                                      Note: JNDIEncryptionCheck is TRUE in all newly created named subsystems based on JMSSubsys. For any older subsystems in which JNDIEncryptionCheck is not set to TRUE, the java.naming.security.credentials value in the jndi.properties file is not treated as an encrypted value.

                                      Customers encrypt the value of java.naming.security.credentials in the jndi.properties file by using the following encryption utilities:

                                      • EncryptJndi.sh, found in the <SIEBEL_ROOT>/ses/siebsrvr/bin folder on UNIX

                                      • EncryptJndi.bat, found in the <SIEBEL_ROOT>\ses\siebsrvr\bin folder on Windows

                                        Configuring Credentials in JMS

                                        JMS-related credentials (those listed in the JMS credential specification) are passed in through a Siebel application-defined configuration mechanism. For configuring JMS-related credentials, see Configuring the EAI JMS Transport.

                                          JMS Password Encryption

                                          When passwords are provided through service input properties (ConnectionPassword, SendPassword, ReceivePassword, or TopicPassword), they are encrypted manually using the Siebel encryptstring utility. The EAI JMS Transport business service attempts to decrypt the password before using it. Passwords supplied using the name server have already been encrypted by the server manager; therefore, it is not necessary to encrypt it again with encryptstring.

                                          Note: The encryptstring utility is located in the BIN directory of your installation of the Siebel Server. For more information, see Siebel Security Guide.

                                            Configuring Against Oracle WebLogic Server

                                            The following instructions let you configure the EAI JMS Transport business service against Oracle WebLogic Server.

                                            Note: For detailed information relevant to client configuration tasks for similar products, such as Oracle SOA Suite, see vendor documentation from Oracle.

                                            To configure the EAI JMS Transport business service against Oracle WebLogic Server

                                            1. Authorize a user to send from SendQueue using SendUsername and SendPassword.

                                            2. Authorize a user to receive from ReceiveQueue using ReceiveUsername and ReceivePassword.

                                            3. Authorize a user to publish and subscribe to and from Topic using TopicUsername and TopicPassword.

                                              By default, the Oracle WebLogic server does not require a username or password to connect to or lookup JNDI objects. If the server does require this, then configure the EAI JMS Transport business service following Step 4 and Step 5.

                                            4. ConnectionUsername and ConnectionPassword are set to a user who can connect to the JMS server, but the user has no privileges for any JMS destinations.

                                              ConnectionUsername and ConnectionPassword can also be left blank if the JMS server accepts anonymous connections.

                                            5. If JNDI lookup is protected, then the jndi.properties file contains the java.naming.security.principal and the java.naming.security.credentials parameters that are used to perform the JNDI lookup.

                                              Note: The JNDI principal and credentials are set to a user who can only perform the JNDI lookup, but has no privileges for any JMS destinations.

                                              Configuring Against TIBCO Enterprise Message Service

                                              For the TIBCO Enterprise Message Service (EMS) client, no separate security context is needed for each operation. Once a connection is established, with the proper credential, all requests sent through the same connection use the same connection security context. This means that switching the security context requires switching connections.

                                              For the ReceiveDispatchSend method, the implication is that the receive credentials must be the same as the send credentials. Receive and send must be executed on the same session or connection to remain a single transaction.

                                              To configure the EAI JMS Transport business service against TIBCO EMS

                                              1. ConnectionUsername and ConnectionPassword are set to proper credentials for executing the JMS operations specified by the JMS business service method.

                                                For example, in the Send method, both ConnectionUsername and ConnectionPassword are set to the credentials that are authorized to send messages to SendQueue.

                                                In the ReceiveDispatchSend method, ConnectionUsername and ConnectionPassword are set to the credentials that can both send to SendQueue and receive from ReceiveQueue.

                                              2. Set the following input properties to empty:

                                                • SendUsername

                                                • SendPassword

                                                • ReceiveUsername

                                                • ReceivePassword

                                                • TopicUsername

                                                • TopicPassword

                                              3. The jndi.properties file contains the java.naming.security.principal and java.naming.security.credentials properties that are used to connect to the EMS server and to lookup JNDI objects.

                                                However, the connection to the EMS server, and the ability to lookup JNDI objects, does not occur if anonymous access is enabled by TIBCO EMS. For more information, see the TIBCO EMS documentation.

                                                Note: These JNDI credentials are set separately from ConnectionUsername and ConnectionPassword.

                                                Configuring Against IBM WebSphere MQ

                                                For the IBM WebSphere MQ client, no separate security context is needed for each operation. Once a connection is established, all requests sent through the same connection use the same connection context.

                                                Note: The IBM WebSphere MQ server does not perform authentication by default. By default, passwords are not validated. Setup authentication for IBM WebSphere MQ is a task for the IBM WebSphere MQ administrator, not the Siebel application administrator.

                                                For the ReceiveDispatchSend method, the implication is that the receive credentials must be the same as the send credentials. Receive and send must be executed on the same session or connection to remain a single transaction.

                                                To configure the EAI JMS Transport business service against IBM WebSphere MQ

                                                1. Set the ConnectionUsername and ConnectionPassword to the proper credentials to execute the JMS operations specified by the JMS business service method. For example, in the Send method, both ConnectionUsername and ConnectionPassword must be set to the credentials that are authorized to send messages to SendQueue.

                                                  Note: ConnectionUsername and ConnectionPassword are required for the Windows 2012 Server platform and recommended for all other Windows platforms.
                                                2. In the ReceiveDispatchSend method, set the ConnectionUsername and ConnectionPassword to the credentials that can both send to SendQueue and receive from ReceiveQueue.

                                                3. Make sure the jndi.properties file contains the java.naming.security.principal and java.naming.security.credentials properties that are used to connect to the EMS server and to look up JNDI objects.

                                                  Note: These JNDI credentials are set separately from ConnectionUsername and ConnectionPassword.

                                                For more information about configuring the EAI JMS Transport business service against IBM WebSphere MQ, see 828113.1 (Article ID) on My Oracle Support.

                                                  About Security Configuration on the JMS Server

                                                  For information about how to protect JMS resources on the JMS server, see the specific vendor documentation.

                                                    Troubleshooting for the JMS Transport

                                                    Several diagnostic methods are present in the EAI JMS Transport to assist in troubleshooting CLASSPATH, JNDI, and problems connecting to the JMS server:

                                                    • CheckClasspath. Iterates through the JVM’s classpath, checking for the existence of each directory in the file system.

                                                      Note: The length of the classpath is limited to 1024 characters. However, it might be truncated when displayed in the user interface and srvrmgr command-line interface. To see the entire classpath, examine the log file. For information about logging, see About Logging for the JMS Transport.
                                                    • CheckJNDIContext. Creates a JNDI InitialContext based on parameters (context factory class, URL) in the jndi.properties file.

                                                      Lists the parameters and the entries found in the context, as well as the names and classes of the administered objects.

                                                    • CheckJNDIObjects. Retrieves administered objects (connection factory, queue, topic) from JNDI.

                                                      If CheckJNDIObjects finishes without errors, then JNDI binding is proper.

                                                      If CheckJNDIObjects finishes with errors, then it means that the JNDI binding has not been done properly. Rebind the JNDI objects or check the jndi.properties file to see if the provider URL is pointing to the correct location.

                                                    • CheckJMSServer. Invokes JMS methods directly and simply. If SendQueue is specified, then CheckJMSServer sends a message and then receives a message. If SendQueue is not specified and Topic is specified, then it creates a durable subscriber, publishes a message, receives it, and then unsubscribes.

                                                      If CheckJMSServer finishes without errors, then both the queuing system and JMS are communicating properly.

                                                      If CheckJMSServer finishes with errors, then it means that the JMS queue in the queuing system is not functioning properly. Check the corresponding queue in the queuing system.

                                                    • CheckAll. Executes all checks: CheckClasspath, CheckJNDIContext, CheckJNDIObjects, CheckJMSServer.

                                                    The following table contains more details on arguments used with some of the JMS Transport debugging methods. The arguments listed are used by all three methods.

                                                    Method Argument Display Name Type Description

                                                    CheckJNDIObjects

                                                    CheckJMSServer

                                                    CheckAll

                                                    ConnectionFactory

                                                    Connection Factory

                                                    Input

                                                    JNDI name for the JMSConnectionFactory

                                                    SendQueue

                                                    Send Queue

                                                    Input

                                                    JNDI name for the queue (optional)

                                                    Topic

                                                    Topic

                                                    Input

                                                    JNDI name of the topic (optional)

                                                    About Logging for the JMS Transport

                                                    The JMS Transport logs messages to a file if the Java system property jms.log is set. This property is specified among the VMOPTIONS in the JVM subsystem using the -Djms.log option.

                                                    The -Djms.log option must specify the path and file name but not the extension, because the JMS Transport automatically adds the .txt extension plus some information about the PID and thread ID.

                                                    For example, by using:

                                                    VMOPTIONS="-Djms.log=C:\temp\mylog"
                                                    

                                                    The log file generated is:

                                                    C:\temp\mylog_xxx_yyy.txt
                                                    

                                                    For more information about JMS logging, refer to the JMS vendor’s documentation.

                                                    About Caching for the JMS Transport

                                                    JMS Receiver connections are cached in Siebel Business Applications. In Siebel CRM version 8.1 and later, JNDI objects are also cached for performance and reliability. Caching eliminates the JNDI service as a point of failure.

                                                    JNDI object caching is active by default. To turn off caching (that is, to force JNDI lookup every time), use the DisableJNDIObjectCache business service method argument for any EAI JMS Transport business service method (operation). When DisableJNDIObjectCache is set to true, JNDI objects are not cached.