在WSO2的现有数据库中创建特定于应用程序的表

时间:2016-09-28 12:15:05

标签: java wso2 datasource wso2as

对于这个要求,我们试图通过传递领域使用org.wso2.carbon.user.core.util.DatabaseUtil类来创建数据源,但我们总是得到一个异常,说明查找数据源时出错。 我们了解在服务器启动期间,org.wso2.carbon.user.core.internal.Activator - >调用startDeploy(BundleContext bundleContext)并创建一个新的RealmService实例,其中成功初始化了realmconfiguration和datasource对象。在Activator类中,初始化的realmservice实例设置为UserCoreUtil类(UserCoreUtil.setRealmService(realmService))。 RealmService初始化调用DefaultRealmService,其中初始化数据源实例并将该对象添加到属性中。

对于以下任何与用户或租户相关的数据库操作,调用调用,调用CarbonContext.getThreadLocalCarbonContext()。getUserRealm()方法,该方法实际使用服务器启动期间由DefaultRealmService存储的属性中的数据源,并创建userStoreManager实例并返回执行所有用户相关操作的userRealm。

为了访问特定于应用程序的表,我们创建了自己的JDBCCustomManager类,并尝试执行JDBC操作。当我们执行“DatabaseUtil.getRealmDataSource(objRealmService.getBootstrapRealmConfiguration())”时,我们需要数据源来执行数据库操作,我们总是得到一个异常“查找数据源时出错:jdbc / WSO2CarbonDB”。

如果我们编写方法来访问JDBCUserStoreManager中的表,那么它的工作方式却不合适。您能否建议是否有其他方法来获取WSO2的数据源对象,以便我们可以在应用程序中使用它。

1 个答案:

答案 0 :(得分:0)

您的描述不太清楚。如果您正在尝试获取数据源对象,则可以这样做。

public static DataSource lookupDataSource(String dataSourceName, final Hashtable<Object, Object> jndiProperties) {
    try {
        if (jndiProperties == null || jndiProperties.isEmpty()) {
            return (DataSource) InitialContext.doLookup(dataSourceName);
        }
        final InitialContext context = new InitialContext(jndiProperties);
        return (DataSource) context.doLookup(dataSourceName);
    } catch (Exception e) {
        throw new RuntimeException("Error in looking up data source: " + e.getMessage(), e);
    }
}

您可以在master-datasource.xml中定义数据源,并为其提供一个用于查找的JNDI名称。