ABAP function group和Tomcat library重复加载问题

ABAP

ABAP help文档里对**LOAD-OF-PROGRAM"的关键字是这样描述的:

This event keyword defines the program constructor of an executable program, a module pool, a function group, or a subroutine pool. The program constructor is an event block whose event is raised by the ABAP-runtime environment when one of the executable programs mentioned above is loaded into the internal session.

以Function group为例,每当一个function group里的任意一个function module第一次被调用时,对应的ABAP program被加载到internal session里,同时ABAP运行时抛出LOAD-OF-PROGRAM, 执行应用程序员编写的事件处理逻辑。

现在我有一个名为ZTOMCAT的function group。其LOAD-OF-PROGRAM就负责弹出调试器。

我有两个report。Report 2的源代码:

REPORT ZJERRY_RE2.

call FUNCTION ‘ZTEST_FM_1‘.

Report 1:

CALL FUNCTION ‘ZTEST_FM_1‘.

SUBMIT zjerry_re2 AND RETURN.

那么我执行report1,断点会触发一次还是两次?

答案是两次。

LOAD-OF-PROGRAM在这种场景下的行为,ABAP help已经说的很清楚了:

When a program is called using SUBMIT or using a transaction code, a new internal session is opened in every call and the event block is executed once in every call.

每次program通过SUBMIT或者事务码的方式调用时,会起一个新的internal session,在此新的session里LOAD-OF-PROGRAM会触发一次。

下图也直观表明了每次调用SUBMIT( calling programs)时会新起一个Internal Session。

Tomcat 库文件的重复加载问题

我的pom.xml里定义了一个gson的依赖关系,ABAPer可以把其类比成在我的Java代码里调用Google提供的gson API。

打成war包之后,该库文件位于WEB-INF/lib文件夹下。

那么如果我有多个Web应用都用到了gson, 则每个应用的WEB-INF\lib文件夹下面都有gson的jar文件。

问题:在运行时,Tomcat只会将一份gson.jar的内容加载到内存么?

答案是不会。根据Tomcat的官方文档,Tomcat会为每个Web应用创建一个专属的ClassLoader实例,每个应用的WEB-INF\lib下的资源,对于其他应用来说不可见,彼此隔离。

当然如果想只用一份库文件,可以把它放到目录 [tomcat-installation-directory]/common/lib下面。更多细节参考stackoverflow上的讨论.

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原文地址:https://www.cnblogs.com/sap-jerry/p/9191473.html

时间: 2024-10-03 05:36:39

ABAP function group和Tomcat library重复加载问题的相关文章

Global variable in ABAP function group

Function group is loaded into runtime memory by the FIRST call of a function module inside this function group. See example below: I have a global variable defined in function group in X3C/504: Before I call any of the function module in this functio

Function group中的含有的一些内容

1:function group中包含有function module, 各种常量和form等. 2: field都是在include中定义的 3:总体的结构图 原文地址:https://www.cnblogs.com/liyafei/p/11128085.html

实训-添加tomcat library 遇到的问题

今天遇到的问题和收获 机房用的是Myeclise 最大仅支持tomcat 6.X ,但今天我用的上传图片的 jar包必须要tomcat 7 以上的. 由于经常将代码用于宿舍和机房,所以每次import后 都会 tomcat 的lib包都不见 项目 右键, --properties -- java build - path 注意一点:关键一步,因为有可能当你点击了会发现 列表什么 都没有显示 那怎么办呢?请看下面 假如server runtime 列表没有出现可选tomcat的情况 右键项目 --

abap function module中的异常处理

1: 定义一个有异常抛出的function module.  (zfm_moudle6),  该函数中有符合exceptions中的异常,将会自动将exceptions中的异常抛出. FUNCTION ZFM_MOUDLE6. *"---------------------------------------------------------------------- *"*"Local Interface: *" RAISING *" CX_SY_AR

2016-05-10 ABAP GROUP BY、HAVING、ORDER BY

简介:ABAP中GROUP BY.HAVING.ORDER BY的使用方法 DATA :g_carrid TYPE sflight-carrid,      g_connid TYPE sflight-connid,      g_paymentsum TYPE i. SELECT carrid connid AVG( paymentsum )  INTO (g_carrid,g_connid,g_paymentsum)  FROM sflight  GROUP BY carrid connid

ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION

Calling Executable Programs(SUBMIT)... 343 设置选择屏幕参数值(SUBMIT...WITH)... 343 实例一:参数传递... 345 实例二:参数传递及返回值接收... 346 控制Called Programs中LISTS输出... 348 修改输出LISTS行列数... 348 将被调程序的输出列表打印到spool system.. 349 将输出列表保存到ABAP memory. 349 使用LEAVE语句退出被调程序... 350 CALL

ABAP开发顾问必备:SAP ABAP开发技术总结

声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 该文档是根据我过去多年学习文档与工作文档总结而成,项目开发过程中我都会参考此文档,主要ABAP很多细节上的东西不可能你记得很牢固,或者你记得一时,但过不了几天做别的项目就会

ABAP Enhancement:第二部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291296.html 第三代:基于类的增强(BADI)... 25 BADI新方式实现... 42 1-构建BADI. 42 2-实现BADI. 44 3-使用BADI过滤器... 49 4-多个实现时究竟调谁... 51 查找系统中的BA

生产环境中使用脚本实现tomcat start|status|stop|restart

一.在实际生产环境中tomcat启动是在bin目录下采用自带脚本startup.sh启动:使用shutdown.sh关闭.如下图: 再如果对于新手来讲在不知道路径情况下重启是一件头痛的事情(注意没有reload,所以重启只能shutdown.sh在startup.sh):而且这里还有一个坑等着: 什么坑呢?   如图: tomcat服务是启动成功了的.那么我想停止服务用shutdown.sh,会出现什么呢? 进程还在而且成为了僵尸进程,万恶啊?居然关不了,终极方法kill -9 进程号.试试?