我们正在开发一个企业应用程序。所有服务将作为Restful Web服务公开。业务逻辑是用ejbs编写的。我们必须从ejbs调用许多后端系统。后端又是来自我们组织中各种应用程序/团队的Web服务。是否可以在ejbs中添加拦截器?
下面是一个简单的流程
WS1 < - > BL_EJB1 < - > BE_EJB1
当WS是web服务,BL是业务逻辑和BE是后端。
我们将整个事务保存在名为reporting_stats和failure_stats的表中。它们基本上包含用户详细信息,例如用户ID,请求进入的时间,响应已发送的时间,已调用的Web服务的路径,已从业务逻辑调用的后端的名称,状态的后端调用,例如从后端获得响应需要花多少时间,后端的响应是否成功等。
由于此日志记录对于每个服务都很常见,因此我们引入了拦截器来记录事务表中的细节。拦截器和ejbs通过EjbContext交换数据。下面是修改后的流动
WS1 < - >拦截器(BL_EJB1)< - >拦截器(BE_EJB1)
有一些情况下我们必须调用BL_EJB1和BL_EJB2从BL_EJB3。在这种情况下,我们不希望触发BL_EJB1和BL_EJB2上的拦截器。
有什么办法在运行时引入拦截器,而不是在开发过程中注释该方法吗?
你的应用程序中的附加层怎么样(而不是使用拦截器)? WS1在日志记录等完成时调用较高的外观层,高层外观层从实际业务逻辑完成的较低层调用方法。来自下层的其他服务可以互相呼叫而不通过较高的外观层。 – stg