Show TOC

Configuring the Sender JMS AdapterLocate this document in the navigation structure

Use

You need to configure the sender JMS adapter to send JMS messages to the Integration Engine.

To configure the adapter you must specify the following:

  • The corresponding Java class
  • General adapter settings
  • The message type to be received
  • The transformation class and the bindings implemented in the transformation class
  • A dispatcher class (optional) with the corresponding settings and the user exits and their settings that are to be called by the dispatcher
  • How to address the Integration Engine
  • Settings specific to the respective JMS provider
Prerequisites

You have:

  1. Installed the corresponding adapter.
  2. Selected the adapter on the configuration screen.
  3. Called the adapter configuration by choosing Configure.
Procedure

The configuration of the sender JMS adapter comprises six functional sub areas:

  1. The version specification for the configuration

    version=30

    This specification is mandatory. If no specification is entered, the configuration is interpreted as an XI 2.0 adapter configuration. Other values are not permitted and trigger an error.

  2. Java class name for the sender JMS adapter

    Specify the class name as follows:

    classname=
    com.sap.aii.messaging.adapter.ModuleJMS2Transport

    This specification is mandatory.

  3. General adapter settings

    You can set the following general parameters for the sender JMS adapter:

    • JMSSession.sessionTransacted=true or false
      The default value is
      true
      .

      This parameter determines whether a transactional JMS session should be used or not. Following processing of a message, a transactional session ends either with a COMMIT, or in the case of an error, with a ROLLBACK.

    • errorDelay

      The default value for this parameter is 0.

      This parameter determines how long the system waits before processing further messages if an error occurs. In transactional processing, it can make sense to specify a certain time period, for example, because messages with errors remain in the queue following a ROLLBACK.

    • reconnectDelay

      The default value for this parameter is -1.

      This parameter controls whether and after what time period an attempt is made to reestablish the connection following a connection error on the JMS side.

      The time period must be specified in milliseconds. No attempt is made if the value is set to -1.

      Note

      Your JMS provider must support the registration of an ExceptionListener for this.

  4. The message type to be received or sent

    On the JMS side, the JMS adapter knows the following messages:

    • JMSMessage
    • JMSTextMessage
    • JMSBytesMessage
    • JMSObjectMessage
    • JMSStreamMessage
    • JMSMapMessage

    For more information, see the correspondingdocumentation on JMSInformation published on non-SAP site .

    On the HTTP side, the JMS adapter knows the following message types:

    • TransportMessage

      This is essentially a (single or multipart) MIME message with a connection to the transport protocol (HTTP). It transports an XMBMessage.

    • XMBMessage

      This is an SAP-defined SOAP message with attachments that is logically based on a multipart-MIME message.

    The architecture of the JMS adapter is designed so that every JMS message can be mapped to a HTTP message.

    In the configuration, specify which message type you want to send:

    • TransportMessage.type=
      TransportMessageXMBMessage
      or
      The default value is
      XMBMessage
      .

    The following parameter is set at runtime:

    • JMSMessage.type
  5. The transformation class in which the bindings for the conversion of different message formats are implemented, and the definition of the particular bindings for the message formats.

    In the configuration, specify the transformation class to be used under transformClass. The following classes are supplied:

    • com.sap.aii.messaging.adapter.trans.JMSTunneling
    • com.sap.aii.messaging.adapter.trans.JMSSinglePayloadBinding

    You can define your own bindings at any point and apply them to the JMS adapter by implementing a class that enhances the class com.sap.aii.messaging.adapter.trans.Transform and entering this class as the transformation class. Use the classes JMSTunneling or JMSSinglePayloadBinding as templates; their functions are explained in the following step:

    In the class com.sap.aii.messaging.adapter.trans.JMSTunneling, a binding is implemented for each of the following cases:

    • JMSTextMessage à TransportMessage
    • JMSBytesMessage à TransportMessage

    As you can see from the class name, each binding is a kind of JMS tunneling. This means that the transport message is transported to the JMS payload.

    In the class com.sap.aii.messaging.adapter.trans.JMSSinglePayloadBinding, a binding is implemented for each of the following cases:

    • JMSTextMessage à TransportMessage

      The payload of a JMSTextMessage is used as the payload of a TransportMessage. The HTTP content type is determined from the value of the parameter XI.ContentType (default value: text/plain).

    • JMSBytesMessage à TransportMessage

      The payload of a JMSBytesMessage is used as the payload of a TransportMessage. The HTTP content type is determined from the value of the parameter XI.ContentType (default value: application/octet-stream).

    • JMSTextMessage à XMBMessage

      The payload of a JMSTextMessage is used as the payload of a XMBMessage. The header data of the XMBMessage is taken from the configuration, for example:

      Tip

      XI.SenderParty=<Sender>

      XI.SenderService=ExtAdapterSender

      XI.InterfaceNamespace=http://sap.com/xi/xidemo

      XI.Interface=ExtAdapterSenderIF

      These address arguments for the sender system are mandatory. They are used to identify the adapter configuration in routing and in mapping in the Integration Engine pipeline. You can also find an explanation about each argument there.

      You can also specify the receiver system by using the following parameter.

      XI.ReceiverParty=<Receiver>

      XI.ReceiverService=ExtAdapterReceiver

      In this case you do not need to determine the receiver in routing.

    • JMSBytesMessage à XMBMessage

      The payload of a JMSBytesMessage is used as the payload of a XMBMessage. The header data of the XMBMessage is taken from the configuration.

    While JMS is used by the bindings in the class JMSTunneling as a kind of means of transport, bindings in the class JMSSinglePayloadBinding are much more specific.

    The message types specified in step 3 control which binding is used at runtime.

  6. The dispatcher class and the user exits to be called by the dispatcher (optional)

    The sender JMS adapter provides you with a dispatcher that you can use to convert messages before they are sent. The settings required for the dispatcher are explained in the example .

  7. How to address the Integration Engine

    Enter the complete address (URL) of the Integration Engine that you want to send the message to:

    XI.TargetURL=
    http://IntegrationEngineHost:port/pipeline-arguments

    This specification is mandatory.

    Note

    The Integration Engine address can also be accessed dynamically from the SAP System Landscape Directory (SLD). The following entry is added to the configuration for this purpose:

    XI.SLDConfiguration=SLDaccessor

    In this case the URL of the corresponding Integration Server for the system specified with XI.SenderService is read from the SLD and used instead of the value specified under XI.TargetURL. Therefore, specify the following:

    XI.TargetURL=<fromSLD>

    To be able to access the SLD, the SLDaccessor service must be configured correspondingly and the respective entries must be maintained in the SLD.

    Note

    If the Integration Server is accessed by means of an HTTP proxy server rather than directly, the following parameters must be set:

    XI.proxyHost=<proxyHostname>

    XI.proxyPort=<proxyPortnumber>

    <proxyHostname> is the host name of the proxy and <proxyPortnumber> is the port where the proxy receives HTTP requests (for example,
    8080
    ).

    If an authentication was specified for the specified URL (HTTP service) in the Integration Engine, the following specifications are mandatory:

    • XI.User=<user-name>
    • XI.Password=<password>
      Note

      The specifications must match those that you made in transaction SICF in the Integration Engine. If you do not specify a user and password combination, or the combination is invalid, the system will terminate each attempt to access the Integration Engine with the message Transport Exception:  http-Error 401 - Unauthorized.

      The user must have the authorizations of group SAP_XI_APPL_SERV_USER on the Integration Server.

    If you want to use a different client or language to the default setting in the Integration Engine when logging on, you can also set the following parameters:

    • XI.Client=<client-no>
    • XI.Language=<language-id>
  8. Provider-specific settings

    For more information about provider-specific settings, see Settings for the JMS Provider .

Example

Below is an example configuration for the sender JMS adapter:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# JMS Adapter Configuration
#
# This configuration can be used as a template to configure the
# JMS sender adapter
#
#**************************************************************************
# Set XI message protocol versionThis example is designed for XI 3.0
.
version=30
#**************************************************************************
#
# JMS message receiver class. Uncomment for receiving JMS messages
classname=com.sap.aii.messaging.adapter.ModuleJMS2Transport
#**************************************************************************
#
# set if a transacted JMS session should be used (default:true)
#JMSSession.sessionTransacted=false
#
# set delay in milliseconds before processing next message after an error
# (default:0)
#errorDelay=10000
#

# set delay in milliseconds before trying to reestablish the JMS connection

# after a connection error (default:-1 (do not try to reconnect))

#reconnectDelay=10000

#

#**************************************************************************
#
# set the message formats you want to process
# formats are only needed if they cannot be evaluated at runtime
#
# TransportMessage Type can be set to TransportMessage or XMBMessage
# it is used for sending and receiving TransportMessages and XMBMessages
#TransportMessage.type=TransportMessage
TransportMessage.type=XMBMessage
#**************************************************************************
#
# uncomment and adjust parameters for Transformation Type
# (binding of JMS TransportMessage); insert your class here for an
# individual binding between JMS and TransportMessage
#
# uncomment the following line for using bindings that belong to Tunneling
#transformClass=com.sap.aii.messaging.adapter.trans.JMSTunneling
# uncomment the following line for using bindings that belong to
# SinglePayloadBinding
transformClass=com.sap.aii.messaging.adapter.trans.JMSSinglePayloadBinding
#
# the following parameters are used in bindings that belong to
# SinglePayloadBinding and require XMBHeader information
#
# uncomment and adjust parameters according to your requirements.Please
# note that the Party identifier needs not to be configured in case of A2A
# scenarios.
# XI.SenderParty=Sender
XI.SenderService=ExtAdapterSender
# XI.ReceiverParty=Receiver
XI.ReceiverService=ExtAdapterReceiver
XI.SenderInterfaceNamespace=http://sap.com/xi/xidemo
XI.SenderInterface=ExtAdapterSenderIF
XI.TraceLevel=1
XI.LoggingLevel=1
XI.QualityOfService=EO
XI.QueueId=ABCDEFABCDEF
XI.ContentType=text/xml
#**************************************************************************
#
# URL of Integration Server to send the messages to
XI.TargetURL=http://<host>:<port>/sap/xi/engine?type=entry
XI.User=XIAF
XI.Password=XIPASS
#**************************************************************************
#
# uncomment and adjust parameters for loading JMS administrated objects via
# JNDI
# uncomment and adjust parameters if not the default context should be used
#JNDI.InitialContext.property.1=java.lang.String
#{javax.naming.Context.INITIAL_CONTEXT_FACTORY}, java.lang.String
#com.sap.engine.services.jndi.InitialContextFactoryImpl
#JNDI.InitialContext.property.2=java.lang.String
#{javax.naming.Context.PROVIDER_URL}, java.lang.String localhost:50004
#JNDI.InitialContext.property.3=java.lang.String
#{javax.naming.Context.SECURITY_PRINCIPAL}, java.lang.String Administrator
#JNDI.InitialContext.property.4=java.lang.String
#{javax.naming.Context.SECURITY_CREDENTIALS}, java.lang.String sap
# set the Lookup Names
#JMS.JNDILookupNameQueueConnectionFactory=jmsfactory/default/joetest
#JMS.JNDILookupNameQueue=jmsQueues/default/sapDemoQueue
#
#**************************************************************************
#
# uncomment and adjust parameters for loading JMS administrated objects
# from file system
#JMS.FileNameQueueConnectionFactory=SAPQueueConnectionFactory.ser
#JMS.FileNameQueue=SAPQueue.ser
#**************************************************************************
#
# uncomment and adjust parameters for creating SonicMQ
# JMS administrated objects
JMS.QueueConnectionFactoryImpl.classname=progress.message.jclient.QueueConnectionFactory
JMS.QueueConnectionFactoryImpl.constructor=java.lang.String p49512:2506
JMS.QueueImpl.classname=progress.message.jclient.Queue
JMS.QueueImpl.constructor=java.lang.String SampleQ1
#**************************************************************************
#
# uncomment and adjust parameters for creating WebSphereMQ
# JMS administrated objects
#JMS.QueueConnectionFactoryImpl.classname=com.ibm.mq.jms.MQQueueConnectionFactory
#JMS.QueueConnectionFactoryImpl.method.setHostName=java.lang.String p24537
#JMS.QueueConnectionFactoryImpl.method.setChannel=java.lang.String JAVA.CHANNEL
#JMS.QueueConnectionFactoryImpl.method.setTransportType=java.lang.Integer {com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP}
#JMS.QueueConnectionFactoryImpl.method.setQueueManager=java.lang.String QM_p24537
#JMS.QueueImpl.classname= com.ibm.mq.jms.MQQueue
#JMS.QueueImpl.constructor=java.lang.String postcard
#JMS.QueueImpl.method.setTargetClient=java.lang.Integer {com.ibm.mq.jms.JMSC.MQJMS_CLIENT_NONJMS_MQ}
#**************************************************************************

#

# uncomment and adjust the parameters for using a dispatcher

#Dispatcher.class=com.sap.aii.messaging.adapter.ConversionDispatcher

#Dispatcher.namespace=namespace1

#namespace1.ConversionDispatcher.logPayload=true

#namespace1.Service.1=Plain2XMLService

#namespace1.Plain2XMLService.class=com.sap.aii.af.sdk.xi.adapter.Conversion

#namespace1.Plain2XMLService.xml.conversionType=SimplePlain2XML

#namespace1.Plain2XMLService.xml.processFieldNames=fromConfiguration

#namespace1.Plain2XMLService.xml.fieldNames=a,b,c

#namespace1.Plain2XMLService.xml.fieldSeparator=;

#namespace1.Service.2=XSLTService

#namespace1.XSLTService.class=com.sap.aii.af.sdk.xi.adapter.XSLTConversion

#namespace1.XSLTService.XSLTConversion.XSLTFileName=Data/DemoConversion.xsl

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++