wso2~product-apim的定位与组成
4.5版本新功能
- admin服务,添加AI/LLM Vendors功能
- 服务的界面无变化
- helm-apim的distributed版添加对openTelemetry
WSO2 API Manager(APIM)的代码仓库采用了模块化设计,其核心功能和持久化代码并未直接存放在 product-apim
主仓库中,而是分布在多个子组件仓库中。以下是具体分析:
1. product-apim
仓库的定位
- 功能定位:
product-apim
仓库主要作为 产品集成层,负责将各子组件(如carbon-apimgt
、carbon-kernel
)的模块整合为完整的 API Manager 发行包。它包含构建脚本、配置文件、集成测试及最终产品打包逻辑,而非核心业务代码。 - 代码内容:
该仓库中可见的代码多为 资源文件(如 JSP 页面、配置文件)、测试用例 和 Maven 构建配置。例如,modules/distribution
目录负责生成最终的可执行 ZIP 包,而核心功能(如 API 发布、网关路由)通过依赖其他组件实现。
- carbon-apimgt https://github.com/wso2/carbon-apimgt.git
- carbon-kerne https://github.com/wso2/carbon-kernel.git
2. 核心代码与持久化组件的分布
- product-apim
- carbon-apimgt
- carbon-registry
- carbon-analytics
- carbon-kernel
carbon-apimgt
仓库:
这是 核心业务逻辑 的存储库,包含 API 管理、密钥生成、数据库交互等关键功能。例如:- 数据库持久化逻辑位于
components/apimgt/org.wso2.carbon.apimgt.impl
模块中,涉及 DAO 层和 Hibernate 配置。 - 核心类如
APIConsumerImpl
(API 消费逻辑)、APIPublisherImpl
(API 发布逻辑)也在此仓库中实现。
- 数据库持久化逻辑位于
carbon-kernel
仓库:
提供 WSO2 产品的运行时基础(如 OSGi 容器、日志框架),并包含部分 通用持久化支持(如 JDBC 连接池、事务管理)。- 其他相关仓库:
carbon-registry
:元数据存储(如 API 配置、策略文件)的持久化实现。carbon-analytics
:事件流处理与状态持久化(如 Siddhi 引擎集成 Cassandra)。
3. 构建与依赖管理
- Maven 依赖机制:
product-apim
通过 Maven 从 WSO2 私有仓库(Nexus)拉取预编译的子组件 JAR 包(如carbon-apimgt-6.1.66.jar
),而非直接包含源码。因此,用户需单独克隆子仓库以查看或修改核心代码。 - 构建流程示例:
若需自定义持久化逻辑(如修改数据库操作),需:- 克隆
carbon-apimgt
并切换到对应版本标签(如v6.1.66
)。 - 修改代码后执行
mvn clean install
安装到本地 Maven 仓库。 - 重新构建
product-apim
,使新编译的 JAR 被集成到最终产品包中。
- 克隆
4. 持久化代码的具体位置
- 数据库交互层:
在carbon-apimgt
仓库中,数据库操作主要位于:org.wso2.carbon.apimgt.persistence.dao
:DAO 接口及实现类(如APIDAO
、SubscriptionDAO
)。resources/dbscripts
:各数据库的 DDL 脚本(如apimgt/mysql.sql
)。
- 配置文件:
数据源定义(如 JDBC 连接)在product-apim
的部署包中通过repository/conf/datasources/master-datasources.xml
配置。
5. 用户常见误解与解决方案
- 误解:认为
product-apim
包含完整源码。
原因:WSO2 的模块化设计导致核心代码分散在多个仓库。
解决:通过官方文档或构建脚本追踪子组件依赖关系。 - 调试自定义代码未生效:
需确保修改的子组件版本与product-apim
的依赖版本一致,并重新构建所有相关模块。
总结
product-apim
仓库:产品集成层,不包含核心代码,仅负责打包。- 核心代码:分布于
carbon-apimgt
、carbon-kernel
等子仓库。 - 持久化实现:需查看
carbon-apimgt
的 DAO 层及carbon-registry
的元数据管理模块。
若需深入分析数据库持久化或修改核心逻辑,需定位到对应的子组件仓库并遵循多模块构建流程。