【问题标题】:WSO2 Identity Server - Custom JDBC User Store Manager - JDBC PoolsWSO2 Identity Server - 自定义 JDBC 用户存储管理器 - JDBC 池
【发布时间】:2016-01-28 15:22:50
【问题描述】:

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

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

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

  1. 在链的某处,是否有用于 JDBCUserStoreManager 的 JDBC 池?如果是这样,有没有办法更健壮地配置那个家伙?
  2. 我能否在我的自定义 JDBC 用户存储管理可以引用的 master-datasources.xml 中创建另一个 JDBC 数据源?

【问题讨论】:

    标签: oracle jdbc wso2 connection-pooling wso2is


    【解决方案1】:

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

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

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

    (您可以检查存储库/组件/插件以找出上述依赖项的正确版本)
    你可以像this code一样注入DataSourceService(@scr.reference标签是指你需要注入的服务,它使用maven scr插件在构建bundle时解析这些依赖)。

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

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

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

    【讨论】:

      【解决方案2】:

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

      我最终查看了 Identity Server 和 Carbon 源代码,发现 JDBCUserStoreManager 确实最终创建了一个由您为该管理器设置的属性配置的 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 部署。

      总而言之,我的用户商店现在正在熬夜和周末。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        相关资源
        最近更新 更多