ABAP SICF服務和Java Servlet的比較
In my opinion ABAP ICF handler and Java Servlet play the same role in enhancement which enables your web server with additional functionality.
This blog will not introduce how an ICF handler class in ABAP or a Servlet in Java are developed, but focus the way those instances of handler class or Servlet are spawned by Web Server.
Let’s first study the Servlet spawn behavior in Java.
Servlet in Java
According to Servlet specification, http request against a given url will be served by the same single instance of servlet.
For example, I have developed a simple Servlet which just returns “Hello world” as response. I map it with url starting with “/Hello”.
In the doGet method, I print out the current thread id and instance address to try to verify if every request is served with the SAME servlet instance.
System.out.println("User id: " + userId + " at thread: " + Thread.currentThread().getId() + " current instance: " + this);
In client side I use jQuery to send out five different request simultaneously:
var LOCAL = "http://localhost:9098/JerryServlet/Hello?userId=";var PREFIX = "i04241";function main() { for( var i = 0; i < 5; i++) { var url = LOCAL + PREFIX + i; var html = getPostByAJAX(url); console.log("response: " + html); } } $(function(){ main(); }); function getPostByAJAX(requestURL){ var html = $.ajax({ url: requestURL, async: true}).responseText; return html; }
When executing the client JavaScript code, I observe in Server console and could find out that these five requests are handled by the same Servlet instance ,however in different threads.
Since I perform the request in an asynchronous mode, so the response of those five requests are processed and returned in parallel.
How singleton behavior of Servlet is achieved
The instance of requested Servlet will only be initialized when it is asked for the first time. The below two-fold instance checking against null is a typical thread-safe implementation pattern for Singleton in Java.
The method loadServlet in class StandardWrapper will call constructor of my sample Servlet via reflection. All subsequent request will be served by this singleton.
Thread pool in Java Servlet
This thread pool behavior is easy to observe, just set breakpoint in doGet method in my Servlet, line 58:
Perform the client code to send five requests, then in Eclipse we can see the five working threads stopped at the breakpoint at the same time:
From the bottom of callstack we get the hint that those working threads are centrally managed by the Thread pool.
ICF Handler class in ABAP
Create a simple ICF service in tcode SICF and implement its handler class.
Set a breakpoint on method HANDLE_REQUEST, then trigger the request sending in client code:
Five debugger windows will pop up for the same time, each for one separate ABAP session where the request is handled.
From this source code we know the fact that in ABAP, the instance of handler class does not behave as singleton in Java Servlet.
From debugging we can observe that different session has different ICF handler instance which are isolated among each other.
Further reading
I have written a series of blogs which compare the language feature among ABAP, JavaScript and Java. You can find a list of them below:
-
Lazy Loading, Singleton and Bridge design pattern in JavaScript and in ABAP
-
Functional programming – Simulate Curry in ABAP
-
Functional Programming – Try Reduce in JavaScript and in ABAP
-
Simulate Mockito in ABAP
-
A simulation of Java Spring dependency injection annotation @Inject in ABAP
-
Singleton bypass – ABAP and Java
-
Weak reference in ABAP and Java
-
Fibonacci Sequence in ES5, ES6 and ABAP
-
Java byte code and ABAP Load
-
How to write a correct program rejected by compiler: Exception handling in Java and in ABAP
-
An small example to learn Garbage collection in Java and in ABAP
-
String Template in ABAP, ES6, Angular and React
-
Try to access static private attribute via ABAP RTTI and Java Reflection
-
Local class in ABAP, Java and JavaScript
-
Integer in ABAP, Java and JavaScript
-
Covariance in Java and simulation in ABAP
-
Various Proxy Design Pattern implementation variants in Java and ABAP
-
Tag(Marker) Interface in ABAP and Java
-
Bitwise operation ( OR, AND, XOR ) on ABAP Integer
-
ABAP ICF handler and Java Servlet
-
ADBC and JDBC
-
CL_ABAP_CORRESPONDING, CL_JAVA_CORRESPONDING and CL_JS_CORRESPONDING
-
Build an Cross Site Scripting example in Java and ABAP
-
Play around with JSONP in nodeJS server and ABAP server
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2284643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP ABAP ADBC和Java JDBC的使用比較JavaJDBC
- Java的位元組碼和ABAP load的比較Java
- ABAP OPEN SQL裡OPEN CURSOR和SELECT的比較SQL
- 服務網格Istio、Linkerd和Cilium效能比較
- Java和JavaSciprt比較Java
- 從ABAP Netweaver的SICF到SAP Kyma的Lambda FunctionFunction
- 庫 vs 服務 vs 側車Sidecar的比較IDE
- 比較服務間通訊的技術 - ardalis
- Java™ 教程(比較字串和字串的部分)Java字串
- Dalvik 和 Java 位元組碼的比較Java
- Java 中 Comparable 和 Comparator 比較Java
- ABAP的include關鍵字,Java的import, C的include和C4C ABSL 的import比較JavaImport
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- Java的BigDecimal比較大小JavaDecimal
- js 深比較和淺比較JS
- 頂級三種服務網格比較 - cncf
- Java 比較器Java
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- JAVA中的Comparable介面和自定義比較器Java
- Java中的字串操作(比較String,StringBuiler和StringBuffer)Java字串UI
- Go和Python比較的話,哪個比較好?GoPython
- ABAP和Java的destination和JNDIJava
- OData服務在SAP CRM,Cloud for Customer和S/4HANA上的實現比較Cloud
- Java動態代理 jdk和cglib的實現比較JavaJDKCGLib
- ==和equals方法的比較
- ImageMagic 和 GraphicsMagick 的比較
- ArrayList和LinkedList的比較
- java比較日期大小Java
- java--BEAN比較JavaBean
- Oracle date 型別比較和String比較Oracle型別
- 【Java】比較業務實體資訊變化的工具類Java
- SAP ABAP OData 服務的 $count 和 $inlinecount 兩個操作的區別inline
- 如何使用 ABAP 程式消費 SAP ABAP OData 服務
- java double、float型別的比較Java型別
- Java Bean Copy元件的效能比較JavaBean元件
- 常用的Java開發工具比較Java
- not in 和 not exists 比較和用法
- TreeMap和HashMap的元素比較HashMap