3.6 KiB
3.6 KiB
ADR-001: 认证和会话管理技术选型
状态
已接受
日期
2026-01-29
背景
认证和会话管理是 Salesforce Partner API 集成的核心功能,需要设计一个可靠、高效的连接管理方案。该功能需要满足以下要求:
- 会话管理:集成 SessionManager 获取 Session ID 和 Server URL
- 连接缓存:避免重复创建连接,提高性能
- 自动 Session 检查:工厂自动检查 Session 有效性,过期时自动清除缓存
- 线程安全:支持多线程环境下的连接获取
- RESTful API:提供标准的 REST API 接口
- 异常处理:统一处理各种异常情况
决策
选择方案 1:使用 AbstractConnectionFactory + SessionManager,理由如下:
- 复用现有基础设施:AbstractConnectionFactory 已经提供了连接缓存和自动 Session 有效性检查功能,可以直接继承使用,减少重复代码
- 与 SessionManager 深度集成:SessionManager 已经实现了会话管理和自动重新登录功能,可以直接调用其方法获取会话信息
- 开发效率高:利用现有的基础设施,可以快速实现连接管理功能,缩短开发周期
- 维护成本低:AbstractConnectionFactory 和 SessionManager 已经在项目中使用,经过充分测试,稳定性高
- 线程安全:AbstractConnectionFactory 使用 ReentrantLock 保证多线程环境下的连接获取安全
- 符合项目架构:与 datai-salesforce-auth 模块的架构设计保持一致
后果
正面影响
- 开发效率高:利用现有的 AbstractConnectionFactory 和 SessionManager,可以快速实现连接管理功能
- 代码复用率高:避免重复实现连接缓存和 Session 有效性检查功能
- 维护成本低:AbstractConnectionFactory 和 SessionManager 已经在项目中使用,经过充分测试,稳定性高
- 性能优秀:连接缓存机制避免重复创建连接,提高性能
- 线程安全:使用 ReentrantLock 保证多线程环境下的连接获取安全
- 架构一致:与 datai-salesforce-auth 模块的架构设计保持一致
负面影响
- 依赖关系:需要依赖 datai-salesforce-auth 模块,增加了模块间的耦合度
- 灵活性降低:如果 AbstractConnectionFactory 或 SessionManager 的功能不满足需求,需要修改基础模块
替代方案
方案 2:自定义工厂模式
- 技术选型:自定义 PartnerConnectionFactory,不继承 AbstractConnectionFactory
- 优点:
- 完全独立,不依赖 datai-salesforce-auth 模块
- 灵活性高,可以根据需求定制功能
- 缺点:
- 需要自己实现连接缓存和 Session 有效性检查,开发成本高
- 需要自己实现多线程安全机制
- 代码复用率低,维护成本高
- 与项目现有架构不一致
- 适用场景:对连接管理有特殊需求,现有基础设施无法满足的项目
方案 3:每次调用创建新连接
- 技术选型:不使用连接缓存,每次调用都创建新的 PartnerConnection
- 优点:
- 实现简单,不需要考虑连接缓存和 Session 有效性检查
- 完全独立,不依赖其他模块
- 缺点:
- 性能差,每次创建连接都需要消耗资源
- Session 过期后无法自动处理
- 不支持多线程环境
- 不符合最佳实践
- 适用场景:对性能要求不高,调用频率很低的项目