Apache Camel URI Completion in Eclipse XML Editor

ICYDK: Apache Camel empowers you to define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or BlueprintXML Configuration files, and a Scala DSL. Apache Camel uses URIs to work directly with any kind of Transport or messaging model such as HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF, as well as pluggable Components and Data Format options. Apache Camel is a small library with minimal dependencies for easy embedding in any Java application.

Completion for Apache Camel URI in Eclipse XML Editor

Thanks to this new community project aiming at providing an Apache Camel Language Server Protocol, Eclipse XML Editor is proposing completion for Apache Camel URIs. https://goo.gl/EDr75t #DataIntegration #ML

“Stop on Exception” for Iterating/General Splitter

Introduction and Motivation

The General Splitter is besides the Iterating Splitter one of the most used Flow steps in an IFlow. It helps to reduce the memory footprint of an IFlow by splitting huge incoming Xml payloads into smaller parts of nodes for further processing. In the streaming mode the splitter doesn’t create an internal DOM and already starts to produce chunks before having reached the end of the payload. So the splitter itself has a very small memory footprint.

Please remember: The General Splitter preserves all nodes on the way to the first split point whereas the Iterating Splitter only extracts the nodes at the split point.

In this blog I am going to explain the option “Stop on Exception” for Iterating/General Splitter.

The Option “Stop on Exception”

The following scenario shows a Content Modifier in the Integration Process, which holds a Xml payload in the message body. The payload is sent to the Subprocess “GS_Router”.

Here is an example for the payload to be split 1 2 3 4 5 6

The General Splitter in the Subprocess “GS_Router” splits this payload with the XPath Expression “//z” into 6 chunks which are sent by the “Send”-Step to Receiver2. After splitting the whole payload without any exception the IFlow ends with status COMPLETED.

To simulate an Exception, the “Router” in the Subprocess gets the condition expression  //z[@id=”3″]. In this case the 3. split leads to the “Error End Event”. The behavior now depends on the splitter option “Stop on Exception”.

* With this option set, the splitter stops after the third split and the IFlow ends in status FAILED. On Receiver2 there are 3 files created.
* Without “Stop on Exception” the splitter continues splitting and Receiver2 gets all 6 chunks. Also here the IFlow ends in status FAILED.

In the next scenario I have moved all steps into a Main Integration Process.

Receiver1 gets the same number of chunks as Receiver2 if the router stays on the default path. Then both Receiver1 and Receiver2 create 6 files with our example payload.

If the “Router” has a condition expression which leads to the “Error End Event” at the 3. split, than the behavior also here depends on the splitter option “Stop on Exception”.

* With this option set, the splitter stops after the third split and the IFlow ends in status FAILED. On Receiver2 there are 3 files created. Receiver1 only creates 2 files.
* Without “Stop on Exception” the splitter continues splitting and Receiver2 gets all 6 chunks. The IFlow ends in status FAILED and Receiver1 only creates 5 files.

We notice that Receiver1 always creates 1 file less than Receiver2. What file is missing and why?

To answer this question we extend the Integration Process by an Exception Subprocess.

If we run this scenario Receiver3 always gets the following chunk 3

That is the missing file of Receiver1! It is the 3. chunk where the exception has raised.

At the bottom of the blog I’ll tell you how to create unique file names when using splitter with SFTP-Receiver.

On the following screen we see the Target of an SFTP-Receiver

If you select “Append Timestamp” you can add a timestamp to each file name but the chunks are produced so fast by the splitter, that the time resolution of this feature is not sufficient.

For really unique file names you can use the Variable ${exchangeId} as part of the file name.

Also ${property.CamelSplitIndex} can be used to number serially the chunks. http://bit.ly/2srr6aF #SAP #SAPCloud #AI

阿里云上到底能运行SAP哪些产品?

本文主要内容大部分来源于SAP已经发布的note:

2552731 – SAP Applications on Alibaba Cloud: Supported Products and IaaS VM Types。

到2018/01/19为止这个note只有英文版(另一个日文版是机器翻译的)。将来原始的note可能会被SAP负责这个note的同事继续更新,届时本文内容可能会同原始的2note有所差异。

阿里云上提供的基础设施服务(Infrastructure Service)可以用于部署SAP产品。当然并不是所有的SAP产品都能运行在阿里云上。下面列出各个维度的限制条件。

支持的操作系统:

SUSE Linux Enterprise Server 12 SP2 (SLES12)或更高版本。

**Linux平台上支持的关系型数据库管理系统: **SAP HANA

具体的硬件要求在这个链接里有描述。

或参考这张图:

阿里云支持的SAP产品线

1. 运行在ABAP应用服务器(Netweaver 7.0X)上的应用。

对SAP Kernel的要求:

(1) SAP Kernel 7.21 EXT (Patch Level 至少 #919)

(2) SAP Kernel 7.22 EXT (Patch Level 至少 #415)

(3) 或者比上述版本号更高

Jerry 注:

我们知道ABAP语言底层是基于C/C++实现的,包括其关键字(比如最简单的关键字WRITE的C++实现有2千多行)和虚拟机(ABAP Runtime)。SAP内部的一群计算机科学家们发明了ABAP这门伟大的语言,由它实现的各种SAP应用帮助了全球超过180个国家和地区的客户们更好地运行其业务。

通过Google我们能搜索到一些关于这些SAP计算机科学家们的介绍,比如这个链接:

http://sapexperts.wispubs.com/SAP-Professional-Journal/Articles/From-XML-to-ABAP-Data-Structures-and-Back-Bridging-the-Gap-with-XSLT?id=2CA6B036062F42C5B7A76A772A934911#.WmGiiaiWbdM

再回到这个note, EXT意为Extended Kernel, 区别于标准(Standard)Kernel。

Standard Kernel和EXT Kernel最大的区别不在于这些C/C++实现的源代码, 而在于生成SAP Kernel的Make服务器的操作系统版本以及C/C++编译器的版本有所区别。

如果您对这个话题感兴趣,可以阅读SAP Community上这个讨论:

what is the difference between normal Kernel 7.20 and the Kernel 7.20 EXT

2. 运行在ABAP/Java应用服务器(Netweaver 7.1及更高版本)上的应用。

对SAP Kernel的要求:

(1) SAP Kernel 7.21 EXT (Patch Level 至少 #919)

(2) SAP Kernel 7.22 EXT (Patch Level 至少 #415)

(3) 或者比上述版本号更高

3. 运行在ABAP/Java应用服务器(Netweaver 7.4及更高版本)上的应用。

对SAP Kernel的要求:

(1) SAP Kernel 7.45 (Patch Level 至少 #612)

(2) SAP Kernel 7.49 (Patch Level 至少 #316)

(3) SAP Kernel 7.53 (Patch Level 至少 #24)

(4) 或者比上述版本号更高

Linux上支持运行SAP产品的阿里云虚拟机种类

Jerry注1:

表格里第三列SAPS列出了一系列数字。什么是SAPS? SAP Application Performance Standard(SAPS)是一种性能评测标准,描述了SAP产品在某种特定的系统配置下的性能表现。

SAP最先在SD(Sales and Distribution)的性能评测中引入SAPS的概念。在SD的SAPS测试里,100 SAPS意味着2000个订单行项目能够在1小时之内,跑完一个典型的业务流程,包括:

* 创建订单
* 为该订单创建Delivery Note
* 显示订单
* 修改Delivery日期
* Post goods issue
* 创建发票

更多SAPS细节,请阅读SAP官方帮助:

1. SAP Standard Application Benchmarks

2. SAP SD Standard Application Benchmark Results

* two tier result
* three tier result

Jerry注2:

注1里能看到SD的SAPS测试是对于2 tier和3tier两种架构分开进行的。2 tier意即数据库服务器和运行SAP产品的应用服务器是部署在一台物理服务器上,可以统一看成服务层。另外一层即客户端层(展现层), 这样就构成了所谓的2 tier(两层架构)。

显然,如果将数据库服务器和应用服务器分开部署,也就形成了三层架构。在阿里云上进行的SAPS评测是基于两层架构进行的。

如果您对具体部署细节感兴趣,建议阅读阿里官方文档:SAP HANA 部署指南

https://help.aliyun.com/document_detail/57229.html?spm=5176.11065259.1996646101.searchclickresult.5af381adNWUGu1

要获取更多Jerry的原创技术文章,请关注我的微信公众号”汪子熙”。 http://bit.ly/2BpJLqe #SAP #SAPCloud #AI