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 JavaAccording 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 ABAPCreate 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 readingI 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的原创文章,请关注公众号"汪子熙":
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72672.html
摘要:比如的的个性化设置是这样的,字体必须用程序猿专用的等宽开源字体,这样显得比较专业。我觉得网上流传的程序猿和工具的鄙视链很无聊,与其有时间去鄙视别人,不如把这时间用来深入研究自己每天用的,进一步提高自己单位时间内的工作效率。 Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题。很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse...
摘要:小的时候,听过牛顿这样谦虚的一句话如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。。发布一个的事件,事件包含创建订单的字段。 这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天。Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导Patrick和Evan叙了叙旧,也拜见了上海SAP圈子里...
摘要:小的时候,听过牛顿这样谦虚的一句话如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。。发布一个的事件,事件包含创建订单的字段。 这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天。Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导Patrick和Evan叙了叙旧,也拜见了上海SAP圈子里...
摘要:小的时候,听过牛顿这样谦虚的一句话如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。。发布一个的事件,事件包含创建订单的字段。 这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天。Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导Patrick和Evan叙了叙旧,也拜见了上海SAP圈子里...
摘要:通过这个链接打开对应的帮助文档,可以看到下列七种登录手段。上图的图例描述了部署在云平台环境上的应用是如何通过访问系统上的服务。用户完成登录操作后,一个简称为被创建,发送给,并缓存于内。将请求通过转发给。 ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档。showImg(https://...
阅读 2445·2021-09-09 09:33
阅读 2819·2019-08-30 15:56
阅读 3100·2019-08-30 14:21
阅读 869·2019-08-30 13:01
阅读 830·2019-08-26 18:27
阅读 3565·2019-08-26 13:47
阅读 3439·2019-08-26 10:26
阅读 1566·2019-08-23 18:38