繁体   English   中英

WSO2身份服务器-自定义JDBC用户存储管理器-JDBC池

[英]WSO2 Identity Server - Custom JDBC User Store Manager - JDBC Pools

WSO2 Identity Server 5.0.0(和一些补丁;)

自定义JDBC用户存储管理器(JDBCUserStoreManager的子级)似乎没有使用JDBC池。 我注意到我可以结束会话关闭的错误和sql异常,而Identity Server本身仍可以通过其单独的数据库连接(配置的池)正常运行。

所以我想我对此有两个问题:

  1. 在链的某个位置,是否有JDBCUserStoreManager的JDBC池? 如果是这样,是否有办法更可靠地配置该人?
  2. 我可以在我的自定义JDBC用户存储管理的master-datasources.xml中创建另一个JDBC数据源吗?

除了使用自己的数据源/连接,您还可以导入Carbon数据源并使用它们(它们带有内置池,无需担心任何配置等)。 您可以通过直接调用ndatasource组件以编程方式访问它们,也可以通过JNDI访问它们。

要直接从ndatasource组件访问它们:
依赖项:

<dependency>
  <groupId>org.wso2.carbon</groupId>
  <artifactId>org.wso2.carbon.ndatasource.core</artifactId>
  <version>add_correct_version_here</version>
</dependency>

(您可以检查存储库/组件/插件以找到上述依赖性的正确版本)
您可以按照以下代码注入DataSourceService(@ scr.reference标记引用您需要注入的服务,在构建捆绑包时,它使用maven scr插件来解析这些依赖项)。

请注意,当您采用这种方法时,您必须将jar作为OSGi捆绑包构建,因为它使用了声明式服务(并且必须将其放置在存储库/组件/插件中)。 否则,依赖项将不会在运行时注入。

接下来,您可以按以下方式访问所有数据源:

List<CarbonDataSource> dataSources = dataSourceService.getAllDataSources();

拉杰夫的回答非常有见地,并有助于调查和评估我应该做什么。 但是,我并没有最终使用该路线。 :)

我最终查看了Identity Server和Carbon的源代码,发现JDBCUserStoreManager确实确实创建了一个JDBC池,该JDBC池由您为该管理器设置的属性配置。 我的自定义用户商店管理器有一个名为CustomUserStoreConstants的类,默认情况下已调用setMandatoryProperty进行设置:

  • JDBCRealmConstants.DRIVER_NAME
  • JDBCRealmConstants.URL
  • JDBCRealmConstants.USER_NAME
  • JDBCRealmConstants.PASSWORD

因此,为池配置了这些值,但仅此而已... 因此,难怪它不能幸免于难!

事实证明,如果在配置参数中找到JDBCRealmConstants.DATASOURCE的值,则进行设置的代码将仅加载该数据源,而忽略任何其他设置的参数。 看到这一点,我摆脱了上面列出的这4个参数,并强迫我的自定义用户存储只允许使用DATASOURCE,并使用默认的JNDI名称在代码中对其进行设置,该名称将始终命名为该数据源。 这样,我就可以在master-datasources.xml中使用所有参数(例如testOnBorrow,validationQuery,validationInterval等)为该数据源配置JDBC池。 现在,唯一需要更改的就是该文件中数据源的配置。

我使用master-datasources.xml中的数据源的另一个原因是,我不必在我的自定义用户存储区的代码中决定我想要或不想要的参数,而只需在xml文件中轻松地进行管理即可。 。 这确实具有配置的可移植性以及IT参与部署和调试的优势。 我在此文件中已经有用于IS部署的其他数据源。

综上所述,我的用户商店现在生活在晚上和周末。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM