1 2 3 Previous Next

william.li

45 Posts

With PI 7.30, an option to deploy a java-only PI system is now available. To help with debugging and logging, additonal capabilities are also introduced to log the messages during the message pipeline processing in the Advanced Adapter Engine (AAE). In this blog, we will look at the configuration steps to turn-on message versioning in AAE.

 

Background Info:

 

The PI 7.30 java-only stack uses only the AAE to process the messages. Without going through the message pipeline of the ABAP stack, SXMB_MONI is no longer available to monitor the messages as they goes through the message pipeline. Prior to PI 7.30, the Advanced Adapter Engine only provides 1 version of the message. Not having multiple versions of the message makes it extremely difficult during debugging, especially when debugging mapping errors. We will only see the result of the mapping, and not the original message.

Now, with the ability to configure the message payload to be shown at different pipeline stages, we are provided the capability to debug errors during pipeline processing. This feature is to fill the gap in AAE which has always been available in ABAP.

As recommended for ABAP, this configuration should only be used for the development environment. The additional persistences of the messages in the database will introduce performance overhead in a productive enverionment.

This configuration is for the AAE, so it applies to both the single-stack and the dual-stack.

 

Configuration Procedure:

 

Call SAP NetWeaver Administrator: http://<host>:<port>/nwa 0.1.

Click on: Configuration Management —> Infrastructure —> Java System Properties

image

image 0.1. Click on the Service tab, enter "XPI Adapter: XI" in the filter entry, and click on the "filter" icon:

image

0.2. In the "Property" tab below, enter "stage" in the fileter entry, and click on the "filter" icon. This will display the "xiadapter.stage.conf" property:

image

0.3. Enter values for the "xiadapter.stage.conf" property: (by default, the value is "MS=3", which means the message is saved in the AAE after receiver determination)

The pipeline stages have the following code:

image

The mode of processing has a code value with the following processing actions:

image

So, based on the default parameter of "MS=3", the message is to be persisted after receiver determination, whereas the processor will store the message, reschedule the message and return to the pipeline.

If we want to see the message after mapping, then we can use "VO=3". So, by combining the 2, such that we can see the messages before mapping and after mapping, using "Modify" we can assign the property to the following value: (MS=3,VO=3)

image

 

Viewing the Message Versions:

To view the different versions of a message:

 

1. Go to "Message Monitor":

image

image

2. Select the message in the "Message List", click on "Open Message":

image

3. You should see the different versions of the message, which you can view the details, e.g. payload.

!https://weblogs.sdn.sap.com/weblogs/images/4172/MSGVER-14.png|height=337|alt=image|width=386|src=https://weblogs.sdn.sap.com/weblogs/images/4172/MSGVER-14.png|border=0!</body>

PI 7.30 added JMS topics support to the JMS adapter. Topics provide true pub/sub support. In this blog, we will look at the configurations for JMS topics using IBM MQSeries 7 as an exmaple.

Background Info:

JMS topic provides a true pub/sub architecture. This means that consumers can subscribe to a topic, and whenever a message is published to that topic, the consumer will receive the message. PI 7.30's JMS adapter can be a subscriber of a topic. The JMS adapter can also publish to a topic. When publishing to a topic, whoever subscribes to that topic will receive the message. This means that receivers (or subscribers) can be added to the integration scenario without us having to make any changes in PI.

In the blog, we will use IBM MQSeries 7 as an example. On the MQ server, topics will have to be created. For more information on the creation and configuration of topics, please reference the following link:
Publish/Subscribe Messaging Can Be Simple with WebSphere MQ

The configuration is quite simple. We basically only need the TopicConnectionFactory java class and the Topic Java Class. For MQ:
TopicConnectionFactory Java Class: com.ibm.mq.jms.MQTopicConnectionFactory
Topic Java Class: com.ibm.mq.jms.MQTopic

It is assumed that the com.sap.aii.adapter.lib.sda has already been deployed with the MQ7 drivers.

JMS Sender Communication Channel:
image
JMS Receiver Communication Channel:
image

 

Again, SAP is going to surprise you with some new features which have often be requested by you. In this sneak preview, we are going to look at the merging of Business Process Management (BPM), Business Rule Management (BRM) and PI into a single integrated java installation. We will look at how ccBPM can be migrated/replaced by BPM. We will also be using the new Eclipse tool to create objects in the ESR and configure the integration scenarios without using the Swing tools of ESR and ID.

As most of you will have recognized that PI is going toward a java-only installation. During this process, we have made PI easier to develop and configure. We have included BPM and BRM as part of PI to replace the ABAP ccBPM. We are replacing the Swing tools (ESR and ID) with Eclipse for designing interfaces and configuring the integration scenarios. And, yes, we can even use the Eclipse tool to develop Message Mapping.

Come and experience the hands-on sessions of PMC165 and PMC166. Use the new PI Eclipse tools and see how they can lessen the learning curve and provide visual representations of your integration scenarios.

The session description:

  • PMC165 - The combination of the new Java-only deployment option of SAP NetWeaver Process Integration and SAP NetWeaver Business Process Management will allow you to build integration-centric processes. This hands-on session will teach you all the details you need to know to bring your first integration process to life. Model a BPMN-based integration process collecting several messages using the Process Composer, configure SAP NetWeaver PI by using the new integration flows, maintain the connection settings for a reliable message transfer between SAP NetWeaver PI and SAP NetWeaver BPM, and finally run and monitor your solution.

 

  • PMC166 - SAP NetWeaver Business Rules Management, in combination with SAP NetWeaver Process Integration, opens up new options for integration scenarios. After a brief introduction to the world of business rules, you will implement an integration scenario which benefits from the usage of the SAP business rules engine: a received order message containing several order items is validated against a business rule. In case of violating the rules, you have the chance to correct the message content on the fly and forward it to the target destination via SAP NetWeaver Process Integration.

Hope to see you there!

SAP NW BPM provides modeling, execution and monitoring of business processes that can span multiple systems. It not only orchestrates information between systems, but can also involve users. For example, many companies are using BPM along with MDM during the authorization process before any master data can be entered into MDM.

In the near future, BPM can optionally be installed with SAP NW PI in the same instance, increasing the usability and integration of the two products. BPM is targeted as the eventual replacement for PI’s ccBPM.

In the future, BPM will also be used to provide real-time end-to-end BAM and on-demand (cloud) execution environment.

As we use BPM today and anticipating its usage in the future, whether with MDM, PI, BAM, SAP Business Suites or whatever, we may find that there are some really nice features and also features needing improvements or missing features that can help us.

Through the idea place, we can now provide feedbacks and suggestions that can potential affect the product’s features and directions. You never know, maybe one of our ideas will become part of the product.

The idea place can be accessed at:
Idea Place for BPM
https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_business_process_management

Idea Place for PI
https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_process_integration

Do you have ideas and feedbacks to improve PI and BPM? Now, you can submit them and solicit opinions from others.

When working with PI and BPM, I am sure we all come across situations where we feel if there are certain features or capabilities in PI and BPM, it will improve our usage of the products. These ideas can be in areas of development, monitoring, administrations, or anything.

Now, there is a place where we can submit our ideas and feedbacks. We can also view and comment on ideas and feedbacks submitted by others...and, even vote for our favorite ones. And, it is possible we can even see our ideas actually to become part of the product.

To submit and view ideas and feedback, you can access the links below:
Idea Place for PI
https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_process_integration

Idea Place for BPM
https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_business_process_management

At PI 7.11 and before, the HTTP adapter is an ABAP adapter. PI 7.3 introduces a new HTTP adapter (HTTP_AAE) based on the java stack, using the java Adapter Framework.

 

In this blog, we will take a look at a couple of test tools that we can use to test the HTTP_AAE adapter.

 

Introduction

 

In PI 7.3, in addition to the exiting HTTP adapter in ABAP, a java adapter (HTTP_AAE) has also been added. This new java adapter uses a java service to send the payload to the AAE of PI 7.3. The java adapter also provides two different methods of sending the payload, GET and POST, therefore, the need for 2 different test tools.

 

One of the benefits of using the HTTP_AAE adapter is to bypass the ABAP stack during message processing, which can increase the performance by as much as 10X. In addition, this adapter is a must-use when we install a java-only PI system without ABAP.

 

HTTP_AAE Adapter Overview

 

The URL to send the payload will be generated by the test tool with the following information. This is also the URL used for POST.

 

http://server:port/HttpAdapter/HttpMessageServlet?interfaceNamespace=sender-interface-namespace&interface=sender-interface-name&senderService=sender-business-component-name&qos=quality-of-service

 

    sender-business-component-name               

          Business Component name or Business System name used in the Integrated Configuration

    quality-of-service

          must be either BE or EO

 

With GET, the following URL is generated by the test tool. It is identical to the *POST* URL, except for the last parameter:

 

http://server:port/HttpAdapter/HttpMessageServlet?interfaceNamespace=sender-interface-namespace&interface=sender-interface-name&senderService=sender-business-component-name&qos=quality-of-service&Main-Payload-Parameter-Name=the-pay-load

    Main-Payload-Parameter-Name

          the Main Payload Parameter Name used in the HTTP_AAE communication channel configuration

    the pay load

          must be URL encoded so that special characters, e.g. "<" and ">" can be sent without problem.

 

  • POST

Sample input screen:

image

Sample result screen, with response:

image

 

HTML code which can be copy-n-pasted to a file with a file extension of .html, e.g. http_aae_Test_730_post.html.

<html>

<script type="text/javascript">;
<!--
function button1_onclick() {
  var result = "";
  var payload = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
  var senderNamespace = escape(document.MessageParameters.SenderNamespace.value);

  var reqString = "http://"
  reqString = reqString + document.MessageParameters.Server.value+":";
  reqString = reqString + document.MessageParameters.Port.value + "/HttpAdapter/HttpMessageServlet?";
  reqString = reqString + "interfaceNamespace=" + senderNamespace;
  reqString = reqString + "&interface=" + document.MessageParameters.SenderInterface.value;
  reqString = reqString + "&senderService=" + document.MessageParameters.SenderService.value;
  reqString = reqString + "&qos=" + document.MessageParameters.Qos.value;

  var xhttp = new ActiveXObject("msxml2.xmlhttp");
  xhttp.open ("POST", reqString, false);
  document.MessageParameters.URL.value=reqString;

  if (document.MessageParameters.Source[0].checked == true) {
    payload = document.MessageParameters.xmlData.value;
   xhttp.send (payload);
  }
  else{
    var xmlDoc = new ActiveXObject("microsoft.xmldom");
   xmlDoc.async=false;
   xmlDoc.load (document.MessageParameters.xmlFile.value);
   xhttp.send (xmlDoc);
  }
  result = xhttp.responseText;
  xhttp.close;
  document.MessageParameters.response.value=result;
}

function getFile() {
  var mypath = document.MessageParameters.xmlFile.value;
var ForReading  = 1;
objFSO          = new ActiveXObject("Scripting.FileSystemObject");
objTextFile     = objFSO.OpenTextFile(mypath, ForReading);

var filearray   = "";

for(var n=0;!objTextFile.AtEndOfStream;n++) {
  sRead = objTextFile.ReadLine();
  filearray += sRead + "\n";
}
objTextFile.Close();

document.MessageParameters.xmlData.value = filearray;
}


//-->
</script>
<head></head>

<body>

<h3>Client HTTP_AAE Adapter Test - Post </h3>
<form name="MessageParameters">
<p>
  <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
   <h4>Header</h4>
    <tbody>
    <tr>
      <td width="10%"><label>ServerHost</label> </td>
      <td width="22%"><input type="text" id="host" name="Server" value="" size="20" /> </td>
      <td width="10%"><label>ServerPort</label> </td>
      <td width="22%"><input type="text" id="port" name="Port" value="" size="10" /> </td>
    </tr>
    <tr>
      <td width="10%"><label>SenderService</label> </td>
      <td width="22%">
      <input type="text" id="senderService" name="SenderService" value="" size="40" /> </td>
      <td width="10%">QOS</td>
      <td width="22%">
  <select id="qos" name="Qos">
  <option value="BE" selected>Best Effort</option>
  <option value="EO" >Exactly Once</option>
  </select>
      </td>
    </tr>
    <tr>
      <td width="10%"><label>SenderInterface</label> </td>
      <td width="22%">
      <input type="text" id="senderInterface" name="SenderInterface" value="" size="40" /> </td>
      <td width="10%"><label>SenderNamespace</label> </td>
      <td width="22%">
      <input type="text" id="senderNamespace" name="SenderNamespace" value="" size="40" /></td>
    </tr>
  </tbody>
  </table>
  <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
   <br>
   <h4>Payload</h4>
    <tbody>
    <tr>
      <fieldset style="padding: 2">
       <td width="50%"><input type="radio" name="Source" value="Textarea" checked="checked" />Type in XML</td>
       <td width="50%"><input type="radio" name="Source" value="File" />Upload File</td>
      </fieldset>
    </tr>
    <tr>
      <td width="50%"><textarea name="xmlData" rows="10" cols="60"><a>test</a></textarea></td>
      <td width="50%"><input type="file" name="xmlFile" size="40"  onChange="return getFile()" /> </td>
    </tr>
  </tbody>
  </table>
  <p>
  <input type="button" value="Send" id="button1" name="button1" LANGUAGE="javascript" onclick="button1_onclick()" />
  </p>
  <hr />
  <h4 align="left">Result</h4>
  <p align="left">URL: <textarea rows="2" name="URL" cols="104"></textarea></p>
  Response Text:
  <textarea name="response" rows="5" cols="100"></textarea>
</form>

</body>

</html>

  • GET

Sample input screen:

http_test_tool-03.png

Sample result screen, with response:

http_test_tool-04.png

HTML code which can be copy-n-pasted to a file with a file extension of .html, e.g. http_aae_Test_730_get.html.

 

 

<html>

<script type="text/javascript">;
<!--
function button1_onclick() {
  var result = "";
  var payload = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
  var senderNamespace = escape(document.MessageParameters.SenderNamespace.value);

  var reqString = "http://"
  reqString = reqString + document.MessageParameters.Server.value+":";
  reqString = reqString + document.MessageParameters.Port.value + "/HttpAdapter/HttpMessageServlet?";
  reqString = reqString + "interfaceNamespace=" + senderNamespace;
  reqString = reqString + "&interface=" + document.MessageParameters.SenderInterface.value;
  reqString = reqString + "&senderService=" + document.MessageParameters.SenderService.value;
  reqString = reqString + "&qos=" + document.MessageParameters.Qos.value;
  reqString = reqString + "&" + document.MessageParameters.MainPayload.value + "=";
  reqString = reqString + encodeURIComponent(document.MessageParameters.xmlData.value);

  var xhttp = new ActiveXObject("msxml2.xmlhttp");
  xhttp.open ("GET", reqString, false);
  document.MessageParameters.URL.value=reqString;

  if (document.MessageParameters.Source[0].checked == true) {
    payload = document.MessageParameters.xmlData.value;
   xhttp.send (payload);
  }
  else{
    var xmlDoc = new ActiveXObject("microsoft.xmldom");
   xmlDoc.async=false;
   xmlDoc.load (document.MessageParameters.xmlFile.value);
   xhttp.send (xmlDoc);
  }
  result = xhttp.responseText;
  xhttp.close;
  document.MessageParameters.response.value=result;
}

function getFile() {
  var mypath = document.MessageParameters.xmlFile.value;
var ForReading  = 1;
objFSO          = new ActiveXObject("Scripting.FileSystemObject");
objTextFile     = objFSO.OpenTextFile(mypath, ForReading);

var filearray   = "";

for(var n=0;!objTextFile.AtEndOfStream;n++) {
  sRead = objTextFile.ReadLine();
  filearray += sRead + "\n";
}
objTextFile.Close();

document.MessageParameters.xmlData.value = filearray;
}


//-->
</script>
<head></head>

<body>

<h3>Client HTTP_AAE Adapter Test - Get </h3>
<form name="MessageParameters">
<p>
  <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
   <h4>Header</h4>
    <tbody>
    <tr>
      <td width="10%"><label>ServerHost</label> </td>
      <td width="22%"><input type="text" id="host" name="Server" value="" size="20" /> </td>
      <td width="10%"><label>ServerPort</label> </td>
      <td width="22%"><input type="text" id="port" name="Port" value="" size="10" /> </td>
    </tr>
    <tr>
      <td width="10%"><label>SenderService</label> </td>
      <td width="22%">
      <input type="text" id="senderService" name="SenderService" value="" size="40" /> </td>
      <td width="10%">QOS</td>
      <td width="22%">
  <select id="qos" name="Qos">
  <option value="BE" selected>Best Effort</option>
  <option value="EO" >Exactly Once</option>
  </select>
      </td>
    </tr>
    <tr>
      <td width="10%"><label>SenderInterface</label> </td>
      <td width="22%">
      <input type="text" id="senderInterface" name="SenderInterface" value="" size="40" /> </td>
      <td width="10%"><label>SenderNamespace</label> </td>
      <td width="22%">
      <input type="text" id="senderNamespace" name="SenderNamespace" value="" size="40" /></td>
    </tr>
  </tbody>
  </table>
  <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
   <br>
   <h4>Payload</h4>
   <label>Main Payload Parameter Name:</label>
   <input type="text" id="mainPayload" name="MainPayload" value="" size="40" />
   <P>
    <tbody>
    <tr>
      <fieldset style="padding: 2">
       <td width="50%"><input type="radio" name="Source" value="Textarea" checked="checked" />Type in XML</td>
       <td width="50%"><input type="radio" name="Source" value="File" />Upload File</td>
      </fieldset>
    </tr>
    <tr>
      <td width="50%"><textarea name="xmlData" rows="10" cols="60"><a>test</a></textarea></td>
      <td width="50%"><input type="file" name="xmlFile" size="40"  onChange="return getFile()" /> </td>
    </tr>
  </tbody>
  </table>
  <p>
  <input type="button" value="Send" id="button1" name="button1" LANGUAGE="javascript" onclick="button1_onclick()" />
  </p>
  <hr />
  <h4 align="left">Result</h4>
  <p align="left">URL: <textarea rows="6" name="URL" cols="104"></textarea></p>
  Response Text:
  <textarea name="response" rows="5" cols="100"></textarea>
</form>

</body>

</html>

With PI 7.30, another IDoc adapter is introduced. This is a java adapter which does not use ABAP services and configuration. In this blog we will examine the configuration requirement for this new java adapter.

Background Info:

With PI 7.30, two new adapters are introduced: Java IDoc and java HTTP adapters. These 2 adapters are useful in the following situations:

  1. To bypass message processing in the ABAP stack, by using the Integrated Configuration of the Advanced Adapter Engine (AAE). This will decrease the resource uilization and increase performance. In another word, we will be able to process more messages faster, with less hardware resources (memory and CPU). In some benchmarks, we have been able to increase the performance of message throughput by 10X.
  2. To be used in the java-only installation of PI 7.30. PI 7.30 provides two installation options: dual-stack (ABAP and java) and single-stack (java-only). By installing the java-only installation, we can decrease the hardware requirement by half, and we can also decrease the installation time by half. Without the ABAP stack, we will no longer have the "classical" IDoc and HTTP adapter in ABAP, therefore, the need for a java adapter.
The new IDoc adapter is "IDoc_AAE".

NOTE: In a dual-stack installation, we can use either the IDoc or IDoc_AAE adapter.

Configuration:

In the blog, we will discuss the recommended configuration. This configuration provides the best logging and tracing capabilities. Also, it allows the sharing of connections for better resource utilization and minimizes configuration errors.

  1. RFC Destination Configuration for receiver communication channels: Just as in ABAP, we have to have an RFC destination. But, in this case, this is a java RFC destination.
    1. Go to NWA and click on: Configuration -> Connectivity -> Destination
      image
    2. Click on "Create":
      image
    3. Enter the required information:
      • Select the local java system as the hosting system.
      • Enter a name for the RFC connection.
      • Select RFC as the destination type.
      • Click on Next.
      image
    4. Enter connection information and click Next: (below is an example)
      image
    5. Enter logon information and click Next:
      image
    6. Enter connection pool settings and click Finish:
      image
    7. Perform a "ping" to test the connection.
      image
  2. RFC Destination Configuration for sender communication channels: When sending IDocs from ERP, an RFC destination to the PI system will be required during the ALE configuration on ERP. In order the create the RFC destination on ERP, a "programid" for an RFC adapter on PI is needed.
    1. In NWA: Configurations -> Infrastructure -> Application Resources
      image
    2. Select the resource adapter, inboundRA:
      1. Enter "inbound" in the filter for Resource Name
      2. Click on the filter
      3. Select Resource Adapter, inboundRA
      image
    3. Configure the default RFC adapter for sender communication channel:
      1. Scroll down to the bottom half of the page
      2. Click on "Properties"
      3. Enter a value for "MaxReaderThreadCount"
      4. Enter "true" for Local
      The ProgramID, XI_IDOC_DEFAULT_PID, must be used when creating the RFC destination on the ERP system.
      image
    4. Create an RFC destination, using SM59, on the ERP syste (not shown here)
  3. IDoc_AAE Adapter Configuration:
    1. Receiver Communication Channel: the receiver is where the RFC destination is needed.
      Below is an example of the IDoc_AAE Receiver Communication Channel.
      image
    2. Sender Communication Channel: (use default configuration)
      image

    NOTE:
    Integrated Configuration in the AAE should be used with IDoc_AAE to take advantage of the performance improvments.

At TechEd 2010, there will be an opportunity for you to provide input to the future direction of PI. If you have strong feelings about features, functionalities, and how you would like to use PI in the future, this would be an opportunity for your voice to be heard.

There will be 2 sessions (SS22 and SS23) at TechEd 2010 Las Vegas, each is 2 hours long. The schedules are Wednsday and Thursday, both from 8AM to 10AM.

In these 2 sessions, we will provide a brief overview of the upcoming release of PI 7.3 and give an outlook to the roadmap - how the next generation of SAP NetWeaver PI will evolve. In addition, we are very much interested in your integration needs as input to our future planning for SOA and enterprise service bus. This is a unique opportunity for participants to drive the future of SAP's integration products from governance, development/configuration, runtime, operations and administration perspectives.

To sign up for the session, on the TechEd website, go to the following link:

image

Participation in the customer feedback and strategy roundtables provides a unique opportunity to influence the direction of the development of SAP software and the SAP NetWeaver technology platform. Through the sessions, you can give SAP greater visibility into your current and emerging business requirements. Customer feedback and strategy sessions bring small groups of SAP customers with expertise in a particular area together with the appropriate SAP product owners. This enables the groups to discuss strategy, business challenges, the product road map, and solution needs. These discussions provide firsthand insight into product enhancements, help you lower implementation risk factors, and strengthen your ties with SAP and fellow customers.

Advance sign-up is required for reserved seating. Each fully paid Full Conference registrant may sign up for a maximum of two customer feedback and strategy roundtables, available on a first-come, first-served basis.

Do you know that PI 7.3 has 2 installation options, dual-stack and java-only single-stack?

Be the first to work on a java-only PI version!

For the PMC262 session, "Using the Advanced Adapter Extended of SAP NetWeaver PI", we will be using the single-stack installation of PI 7.3.  In this session we will cover the java IDoc adapter.  Yes, no ABAP will be used to send IDoc messages between backend SAP systems!  You will be able to learn the configuration requirements for both sender and receiver communication channels in an orders request and response scenario with an ECC backend system.

You will also use the new monitoring tools in NWA to track these messages.

Sign up for PMC262 before all the seats are taken.  This is a hands-on session, there are only a limited number of seats available.

Although, in general, it's not a good idea to bypass authentication when calling a WS service application, it does come in handy sometimes when the application does not really need to authenticate the caller. Some examples might be retrieving non-secure data, e.g. products available for purchase, or airline schedules.

But, when SAP is the provider of such an application, there seems to be no way to get around this requirement; we always have to provide some kind of authentication such as userid and password.

In this blog, we will explore a new feature in ESR 7.1.1 that does allows us to configure such a scenario.

Note: For this blog, you should at least be familiar with the creation of service interfaces in the ESR, generating ABAP proxy with SPROXY, and used SOAMANAGER to create WS services.

What are the steps:

  1. Create the service interface in the ESR, indicating no security.
  2. Generate the ABAP proxy and provide the application code.
  3. Use SOAMANAGER to create the endpoint and binding for the proxy.
  4. Test the WS application.

In this blog, we use a simple request-response example, a "Hello World" application. I will send a request and the response will come back with a text message containing the request message.

Steps in detail:

  1. Create the service interface in the ESR, indicating no security.
    There is a new dropdown, Security Profile. Select No. Everything else in the design process remain the same. Save and activate the service interface.

    image

  2. Use ABAP transaction SPROXY on the service provider system, generate the ABAP proxy and provide the application code.

    image
    Please note, in the configuration tab, the authentication should indicate None. This value cannot be selected, it is carried over from the ESR.

    The application code is quite simple (the response is just saying Hello...):

    image

  3. Use SOAMANAGER to create the endpoint and binding for the proxy. As this is probably not a common task, I will provide a little more details here.
    1. Execute ABAP transaction SOAMANAGER on the service provider system, which will take you to a browser application. Select the tab and click on the link as indicated. image
    2. Create the WS endpoint for the proxy.
      image
      For #2, the external service name can be gotten from the proxy name in SPROXY. It is the same as the service interface name created in the ESR.
    3. A new window will appear. After verifying the entries, click "Apply Settings". You can change the binding name if you wish, as I have done here. The binding name should be unique and be identifiable with the proxy.
      image
    4. Scroll down the browser screen, you will see the following:
      image image
      Unless the "Security Profile" is set to "No" in the ESR, the "No Authentication" option will not be selectable; it will be greyed out.
    5. Select the "No Authentication" option. The "ABAP Service User" entry will appear. This is the user which will be used to logon to the the system, so that no logon information will be needed to be entered by the client or consumer application. image
    6. Scroll up the browser page and save the configuration.
      image
      The service is now ready to be tested.
  4. Test the WS application.
    To test the service, I am using a generic WS/SOAP test program, soapUI, which can be downloaded for free from http://www.soapui.org. I will not go into the details of using soapUI; it should be self-explanatory and the download comes with documentations.
    1. Import the WSDL of the service. The WSDL URL can be obtained from the SOAMANAGER screen:
      image
      In soapUI:
      image
      Copy-n-paste the WSDL URL and click "OK". You will be asked to enter userid and password to access the WSDL metadata.
      image
    2. Expand the soapUI project to see the imported service.
      image
      On the right side is where we can enter the test data.
    3. Enter anything as test data and click "Run":
      image
    4. In soapUI, we normall have to enter runtime authentication information in the propeties section. But, as you can see, the username and password entries are left blank, indicating no authentication is needed.
      image

SAP NetWeaver Business Process Management (BPM) involves both people and systems. With the new functionality of BPM in SAP NetWeaver 7.20, this development process becomes much easier.

The Composite Environment (CE) is already the preferred environment to develop user interfaces and interactions. With the new features in BPM, it gives us another option in the coordination and orchestration of messages between systems. 

Due to the easiness of connecting to SAP and 3rd party business systems and applications, Processing Integration is still preferred for system integration.

In this pod cast, we will take a look at how to take advantage of both environments (CE BPM and PI), and provides a high level view for development in both CE and PI.

Click on the "Download Media" link to view the pod cast.

As we upgrade MQ servers in the landscape, how will this effect PI's JMS adapters? What should we do if we have multiple MQ server versions in our landscape?

In this blog, we will take a look at some of the compatibility issues between the different releases of MQ when integrating with PI.

Background Info:

When using the PI technical adapters to integrate with 3rd party data sources, e.g. database and messaging systems, we must include the drivers, or libraries, of those systems in either aii_af_jmsproviderlib.sda for PI 7.0/XI 3.0 or com.sap.aii.adapter.lib.sda for PI 7.1+.

Most of the drivers for these systems are backward compatible. This means that when using the lastest driver version, we should also be able to access all previous versions of the same database or messaging system.

Unfortunately, this is not the case for IBM MQ.

Here, we have examined 3 different driver versions of MQ: 5.3, 6.0 and 7.0. Using the drivers of these different versions to access MQ server 5.3 and 7.0.

Required Drivers:

For the different releases of the MQ, different sets of drivers (client libraries or jar files) are required:

  1. 5.3:
    com.ibm.mq.jar
    com.ibm.mqjms.jar
  2. 6.0:
    com.ibm.mq.jar
    com.ibm.mqjms.jar
    connector.jar
    dhbcore.jar
    rmm.jar
  3. 7.0:
    CL3Export.jar
    CL3Nonexport.jar
    dhbcore.jar
    rmm.jar
    connector.jar
    fscontext.jar
    providerutil.jar
    com.ibm.mqjms.jar
    com.ibm.mq.headers.jar
    com.ibm.mq.jar
    com.ibm.mq.jmqi.jar
    com.ibm.mq.pcf.jar
    (It is possible a few of the above jar files may not be needed. We did verify which ones.)
Compatibility Findings:

Below are our finding when testing the different sets of drivers on a PI 7.1 system, accessing MQ 5.3 and MQ 7.0 servers. I do not believe the PI version will make any different for this test.

MQ Server
Version
MQ Driver Version Comments
5.3 6.0 7.0
5.3imageimageimage11Problem with JMS
receiver comm chan
7.0image2imageimage2Problem with JMS
sender comm chan

Recommendation:

MQ6 drivers or client libraries are most suitable when multiple versions of MQ servers are used in the landscape.

If only a single version of MQ server is used, then that version's driver or client libraries should be used.

Although this is an old topic, I've continued to receive questions on this subject. The question is "how can I read the SOAP header elements in PI and use them in mapping?"

Then, the follow-up question always related to how do I write an user-defined function in Message Mapping to access those header information, which might be accessible through the Global Container object?

But, in fact, the solution is much simpler. No coding is required. It is merely a check in the SOAP communication channel configuration.

The SOAP sender communication channel gives us an option to send the complete SOAP XML, including the header. Then, we just need to construct a message type in the Enterprise Service Repository (ESR) or Integration Repository (IR) to represent the XML. With that, message mapping can be performed.

Let us use the example below.

By default, the communication channel configuration is below:

image

The XML of the SOAP message is below, when retrieved from SXBM_MONI in PI:

image

By making two changes we can send the complete XML of the SOAP message, including the header:

  1. Check the option, "Do Not Use SOAP Envelope":

    image

  2. Add "nosoap=true" to the SOAP's WSDL URL:

    image

As a result, the XML payload as seen in SXMB_MONI:

image

Reference: Configuring the Sender SOAP Adapter: http://help.sap.com/saphelp_nw04/helpdata/en/fc/5ad93f130f9215e10000000a155106/frameset.htm

With NetWeaver Process Integration 7.10, new performance-oriented features have been introduced. We have put together a hands-on session for TechEd 2009 relating to three of these features. Depending on your scenarios, one or more of these features can be used to improve the performance of your interfaces.

This hands-on session will provide three exercises, each relating to a different feature:

  1. Integrated Configuration in the Advanced Adapter Engine (AAE).
    • Message processing without invoking the Integration Engine in ABAP
    • Reduces resource consumption
    • Increases performances up to a factor of 10X
  2. Message Packaging in the Integration Server during Message Processing.
    • Several messages are processed in a single service call
    • No effect on logging and monitoring
    • Increases performance up to a factor of 3X
  3. Direct Connection using webservice runtime in ABAP proxies.
    • Centralized design and configuration of point-to-point connection
    • Reduces resource consumption without going through a middleware
    • Automatic backend configuration

As you upgrade from XI 3.0/PI 7.0 to PI 7.1x, these features can be evaluated to provide additional message throughput and increase the use and life of existing hardware resources.

Session number of this hands-on session will be provided at a later date.

SAP NetWeaver Business Process Management (BPM) involves both people and systems. With the new functionality of BPM in SAP NetWeaver 7.20, this development process becomes much easier.

The Composite Environment (CE) is already the preferred environment to develop user interfaces and interactions. With the new features in BPM, it gives us another option in the coordination and orchestration of messages between systems. As a result, it becomes possible to replace ccBPM in SAP NetWeaver Process Integration (PI) with BPM.

Due to the easiness of connecting to SAP and 3rd party business systems and applications, Processing Integration is still preferred for system integration.

In this hands-on session, we will take a look at how to take advantage of both environments (CE BPM and PI). The session will involve development in both CE and PI. On CE, we will use Visual Composer and BPM. On PI, we will use adapters and message mappings. Web Services will be used for integration between PI and CE.

The diagram below gives a preview of the hands-on session combining people and system integration using CE and PI:

image

Join us for this exciting new session!

Session number of this hands-on session will be provided at a later date.

Filter Blog

By date:
By tag: