2016-09-28 16 views
0

この要件では、レルムを渡してorg.wso2.carbon.user.core.util.DatabaseUtilクラスを使用してデータソースを作成しようとしましたが、データソースを検索する際にエラーが発生しました。 サーバの起動時に、org.wso2.carbon.user.core.internal.Activator - > startDeploy(BundleContext bundleContext)が呼び出され、realmconfigurationおよびdatasourceオブジェクトが正常に初期化される新しいRealmServiceインスタンスが作成されることがわかります。 Activatorクラスでは、初期化されたrealmserviceインスタンスはUserCoreUtilクラス(UserCoreUtil.setRealmService(realmService))に設定されています。 RealmServiceの初期化によってDefaultRealmServiceが呼び出され、データソースインスタンスが初期化され、そのオブジェクトがプロパティに追加されます。WSO2の既存のデータベースにアプリケーション固有のテーブルを作成

以下のユーザまたはテナント関連のDB操作では、CarbonContext.getThreadLocalCarbonContext()。getUserRealm()メソッドが呼び出され、サーバの起動時にDefaultRealmServiceによって格納されたプロパティのデータソースが実際に使用され、 userStoreManagerインスタンスを作成し、すべてのユーザー関連操作が実行されるuserRealmを返します。

アプリケーション固有のテーブルにアクセスするために、独自のJDBCCustomManagerクラスを作成してJDBC操作を実行しようとしました。 "DatabaseUtil.getRealmDataSource(objRealmService.getBootstrapRealmConfiguration())"を実行すると、DB操作を実行するためにデータソースが必要ですが、常に「データソースを検索する際のエラー: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名を付けることができます。

関連する問題