2016-09-28 38 views
0

對於此需求,我們嘗試通過傳遞領域使用org.wso2.carbon.user.core.util.DatabaseUtil類創建數據源,但我們總是會收到一個異常查找數據源時出錯。 我們知道在服務器啓動時,會調用org.wso2.carbon.user.core.internal.Activator - > startDeploy(BundleContext bundleContext),並創建一個新的RealmService實例,其中realm配置和數據源對象已成功初始化。在Activator類中,初始化的realmservice實例被設置爲UserCoreUtil類(UserCoreUtil.setRealmService(realmService))。 RealmService初始化調用DefaultRealmService,其中初始化數據源實例並將該對象添加到屬性中。在WSO2的現有數據庫中創建特定於應用程序的表

對於調用下面調用的任何與用戶或租戶相關的數據庫操作,都會調用CarbonContext.getThreadLocalCarbonContext()。getUserRealm()方法,該方法實際上使用DefaultRealmService在服務器啓動期間存儲的屬性中的數據源,創建userStoreManager實例並返回執行所有用戶相關操作的userRealm。

爲了訪問特定於應用程序的表,我們創建了自己的JDBCCustomManager類並嘗試執行JDBC操作。當我們執行「DatabaseUtil.getRealmDataSource(objRealmService.getBootstrapRealmConfiguration())」時,我們需要數據源來執行數據源操作,但是我們總是會收到一個異常「查找數據源時出錯:jdbc/WSO2CarbonDB」。

如果我們在JDBCUserStoreManager中編寫訪問我們表的方法,但它不是正確的方法。您能否建議是否有其他方法來獲取WSO2的數據源對象,以便我們可以在應用程序中使用它。

回答

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名稱。

相關問題