2016-09-28 3 views
0

Для этого требования мы попытались создать источник данных, используя класс org.wso2.carbon.user.core.util.DatabaseUtil, передав область, но мы всегда получаем исключение ошибка в поиске источника данных. Мы понимаем, что во время запуска сервера вызывается org.wso2.carbon.user.core.internal.Activator -> startDeploy (BundleContext bundleContext) и создает новый экземпляр RealmService, где объекты конфигурации и объекты данных успешно инициализируются. В классе Activator инициализированный экземпляр realmservice устанавливается в класс UserCoreUtil (UserCoreUtil.setRealmService (realmService)). Инициализация RealmService вызывает функцию DefaultRealmService, где экземпляр datasource инициализируется и этот объект добавляется к свойствам.Создание таблиц конкретных приложений в существующей базе данных WSO2

Для любого пользователя или операций, связанных с арендатором дБ ниже вызова вызывается, CarbonContext.getThreadLocalCarbonContext(). GetUserRealm() вызывается метод, который фактически использует источник данных из свойств, которые хранились на DefaultRealmService во время запуска сервера и создает экземпляр userStoreManager и возвращает userRealm, через который выполняются все связанные с пользователем операции.

Для доступа к таблице конкретных приложений мы создали собственный класс JDBCCustomManager и попытались выполнить JDBC-операции. Нам нужен источник данных для выполнения операций DB для этого, когда мы выполняем «DatabaseUtil.getRealmDataSource (objRealmService.getBootstrapRealmConfiguration())», мы всегда получаем исключение «Ошибка в поиске источника данных: jdbc/WSO2CarbonDB».

Если мы напишем методы доступа к нашей таблице в JDBCUserStoreManager, это работает, но это не правильный способ сделать. Можете ли вы предложить, есть ли другой способ завладеть объектом данных WSO2, чтобы мы могли использовать его в приложении.

ответ

0

Ваше описание не очень понятно. Если вы пытаетесь получить объект datasource, вы можете сделать это так.

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); 
    } 
} 

Вы можете задаваемая источник данных в мастер-datasource.xml и дать ему имя JNDI, который используется для поиска.