拦截C ++方法调用(Tuxedo,tpcall)

时间:2013-12-16 12:10:23

标签: c++ intercept tuxedo

拦截C ++方法调用的一般问题......

是否有任何开源框架?使用Tuxedo(11+)作为我的容器,所以基本上我想在成功的tpcall调用上做“周围”。来自Tuxedo的TSAM将此作为扩展,但我宁愿跳过TSAM大象并自己陷入tpcall调用。

想法?

2 个答案:

答案 0 :(得分:1)

如果要拦截服务MYSERVICE,可以编写一个名为INTERCEPTOR的通用服务,并执行以下操作:

  1. 取消使用MYSERVICE并使用名称INTER_MYSERVICE
  2. 进行宣传
  3. 使用名称MYSERVICE
  4. 宣传INTERCEPTOR
  5. INTERCEPTOR-service必须查看它所调用的名称(MYSERVICE),并且必须将呼叫转发给名称为INTER_name的服务,在本例中为INTER_MYSERVICE。
  6. 此配置可以动态完成,无需重新启动。

    我将它用于开发中的调试/日志记录目的,它可以很好地运行。我不确定我是否会在生产中使用它。此外,我们只使用XOCTET缓冲区类型,这使得它更容易,但我认为它也适用于不同的缓冲区类型。

    同时为数百个服务执行此操作可能会成为一个问题。

答案 1 :(得分:0)

我认为有两种可能的解决方案:

1)最简单的方法是实现tputrace(3c)函数和libutrace.so并在那里捕获tpcall或tpservice。这种方法的缺点是你必须为你的应用程序打开tmtrace,我不会依赖它来实现业务功能。它适用于监控,调试等。

2)实现自定义TSAM + Tuxedo插件。您可以只启用自己的插件并跳过mondebug,monshm elephants。或者您可以完全跳过TSAM +并为未记录的引擎/ tsam /代理接口实现插件。

I wrote about similar problem for my DIY Tuxedo monitoring