对于这个要求,我们尝试使用 org.wso2.carbon.user.core.util.DatabaseUtil 类通过传递领域来创建数据源,但是我们总是得到一个异常,说在查找数据源时出错。我们了解到,在服务器启动期间,org.wso2.carbon.user.core.internal.Activator -> startDeploy(BundleContext bundleContext) 被调用并创建了一个新的 RealmService 实例,其中领域配置和数据源对象已成功初始化。在 Activator 类中初始化的 realmservice 实例被设置为 UserCoreUtil class(UserCoreUtil.setRealmService(realmService))。RealmService 初始化调用 DefaultRealmService,其中初始化数据源实例并将该对象添加到属性中。
对于调用以下调用的任何与用户或租户相关的 DB 操作,调用 CarbonContext.getThreadLocalCarbonContext().getUserRealm() 方法实际上使用了在服务器启动期间由 DefaultRealmService 存储的属性中的数据源,并创建了 userStoreManager 实例并返回执行所有用户相关操作的 userRealm。
为了访问特定于应用程序的表,我们创建了自己的 JDBCCustomManager 类并尝试执行 JDBC 操作。我们需要数据源来执行数据库操作,当我们执行“DatabaseUtil.getRealmDataSource(objRealmService.getBootstrapRealmConfiguration())”时,我们总是得到一个异常“查找数据源错误:jdbc/WSO2CarbonDB”。
如果我们在 JDBCUserStoreManager 中编写方法来访问我们的表,它可以工作,但这不是正确的方法。您能否建议是否有任何其他方法来获取 WSO2 的数据源对象,以便我们可以在应用程序中使用它。