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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏VMCloud

如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)

当 Windows 出现异常 Crash 时 Windows 会调用 Dump 系统来形成一个转储文件(*.dmp),通过特殊工具可以进行分析。

7960
来自专栏决胜机器学习

设计模式专题(十三) ——备忘录模式

设计模式专题(十三)——备忘录模式 (原创内容,转载请注明来源,谢谢) 一、概述 备忘录模式(Memento)是在不破坏封装性的前提下,捕获一个对象的内部状态...

3969
来自专栏程序猿DD

优雅处理你的Java异常

来源:https://my.oschina.net/c5ms/blog/1827907

2062
来自专栏FreeBuf

工业控制系统安全之——Modbus学习笔记

O、术语 1 word =2 byte; 1 byte =8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代码作为数据在...

66110
来自专栏Java面试通关手册

面试必备之乐观锁与悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,...

3042
来自专栏Android先生

Android Studio3.0更新之路(遇坑必入)

如果你从Android Studio内部点击更新的话,会跳转到Android的官网,没有梯子的同学可以去这个网站下载更新:

954
来自专栏菩提树下的杨过

thrift中的超时(timeout)坑

最近在项目中采用thrift作为后台服务rpc框架,总体用下来性能还不错,跨语言特性使用起来也还行,但是也遇到了一些坑,其中之一就是超时问题(timeout),...

6029
来自专栏小鄧子的技术博客专栏

About ExecutorService(3),我所认识的AsyncTask

打开电脑的时候已经深夜十二点多了,周末两天过的实在憋屈,小伙伴喊我去打球,因为脚趾的伤至少还要数周才能痊愈,于是当了一天的啦啦队,第二天果断没再去。。。

1163
来自专栏jessetalks

bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序

也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式。通常的说法是它通过避免页面刷新...

3105
来自专栏牛客网

腾讯OMG后台开发面经

3520

扫码关注云+社区