首页 > 解决方案 > 使用 UserDefined JDBC 提供程序通过 wsadmin 创建数据源时,不会出现数据源的自定义属性(J2EEResourcePropertySet)

问题描述

所以基本上我已经通过 wsadmin 创建了用户定义的 JDBC 提供程序:

AdminTask.createJDBCProvider('[-scope Cluster=MyCluster -databaseType User-defined -providerType "User-defined JDBC Provider" -implementationType User-defined -name "MSSQL JDBC Provider" -description "Microsoft SQL Server JDBC Driver" -classpath [${SQL_PATH}/sql.jar ] -nativePath "" -implementationClassName com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource ]')

之后我想创建数据源。所以基本上当我使用 UI 创建数据源时 - 它用该数据源(55 个 J2EEResourceProperties)的自定义属性(J2EEResourcePropertySet)填充 3 个页面。

如果我使用 wsadmin,由于某种原因它不会填满这 3 个页面,只有我看到 ~8 个自定义属性(J2EEResourceProperties)。

如果我在创建槽 UI 和脚本时查看日志命令辅助命令 - 它们是相同的。

有人可以解释我有什么问题吗?运行脚本时我还需要 55 个自定义属性。谢谢。

这是我的数据源脚本:

jdbcprovider = AdminConfig.getid('/JDBCProvider:MSSQL JDBC Provider/')
AdminTask.createDatasource(jdbcprovider, '[-name DataSource1 -jndiName DataSource1 -dataStoreHelperClassName com.ibm.websphere.rsadapter.MicrosoftSQLServerDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias SAmgr/DataSource1 ]')

添加图像以了解:

出现 55 个自 定义属性:通过 UI 自定义属性创建数据源:

出现 8 个自定义属性: 通过 wsadmin 脚本自定义属性创建数据源

标签: jdbcwebspheredatasourcejythonwsadmin

解决方案


编辑:当您使用使用一种预定义类型(如 MS SQL Server JDBC 驱动程序)创建的 JDBC 提供程序创建数据源时,WAS 使用模板的内容来填充(除其他外)数据源的属性。8 个 WebSphere 属性(如 webSphereDefaultQueryTimeout)和其他供应商特定的属性(如 MSSQL Server 的 applicationName)都有一个模板。8 个 WebSphere 特定属性对所有数据源都是通用的,由 WAS 维护,不是 JDBC 驱动程序的属性。供应商特定模板中的属性是所有供应商属性的子集,基于我们对在托管(JEE 应用程序服务器)环境中设置/取消设置属性是否“安全”的评估。

无论您是从管理控制台还是 wsadmin 创建数据源,当 JDBC 提供程序基于预定义供应商之一时,属性集都是相同的,因为它来自标准模板。您看到的行为差异是因为您正在创建用户定义的 JDBC 提供程序,而不是使用预定义的提供程序之一。通常,仅当您要使用的 JDBC 驱动程序不是预定义的驱动程序之一时,才需要用户定义的 JDBC 提供程序。当您使用管理控制台从用户定义的 JDBC 提供程序创建数据源时,它在后台调用一个方法来内省驱动程序并发现 JDBC 驱动程序作为属性公开的任何公共 javabean。除了上述模板中的 8 个 WebSphere 属性之外,管理控制台随后将这些属性添加到数据源。管理控制台执行自省,因为没有可用于供应商属性的模板。但是,当您使用 wsadmin 从用户定义的 JDBC 提供程序创建数据源时,它不会执行该自省,因此您在数据源上看到的唯一属性将是上述模板中的 8 个 WebSphere 属性。在某些情况下,控制台以编程方式与通过脚本执行某些步骤,并且可能会出现此类行为差异。所以,这就是“为什么不同”的答案。经过调查,没有选项可以让 wsadmin 命令内省添加附加属性的驱动程序。我看到有两种方法可以解决问题并添加属性。但是,当您使用 wsadmin 从用户定义的 JDBC 提供程序创建数据源时,它不会执行该自省,因此您在数据源上看到的唯一属性将是上述模板中的 8 个 WebSphere 属性。在某些情况下,控制台以编程方式与通过脚本执行某些步骤,并且可能会出现此类行为差异。所以,这就是“为什么不同”的答案。经过调查,没有选项可以让 wsadmin 命令内省添加附加属性的驱动程序。我看到有两种方法可以解决问题并添加属性。但是,当您使用 wsadmin 从用户定义的 JDBC 提供程序创建数据源时,它不会执行该自省,因此您在数据源上看到的唯一属性将是上述模板中的 8 个 WebSphere 属性。在某些情况下,控制台以编程方式与通过脚本执行某些步骤,并且可能会出现此类行为差异。所以,这就是“为什么不同”的答案。经过调查,没有选项可以让 wsadmin 命令内省添加附加属性的驱动程序。我看到有两种方法可以解决问题并添加属性。因此,您在数据源上看到的唯一属性将是上述模板中的 8 个 WebSphere 属性。在某些情况下,控制台以编程方式与通过脚本执行某些步骤,并且可能会出现此类行为差异。所以,这就是“为什么不同”的答案。经过调查,没有选项可以让 wsadmin 命令内省添加附加属性的驱动程序。我看到有两种方法可以解决问题并添加属性。因此,您在数据源上看到的唯一属性将是上述模板中的 8 个 WebSphere 属性。在某些情况下,控制台以编程方式与通过脚本执行某些步骤,并且可能会出现此类行为差异。所以,这就是“为什么不同”的答案。经过调查,没有选项可以让 wsadmin 命令内省添加附加属性的驱动程序。我看到有两种方法可以解决问题并添加属性。

如果您需要的驱动程序属性集是包含在该驱动程序标准模板中的属性的一部分,请从创建用户定义的 JDBC 提供程序更改为使用由该驱动程序供应商创建的提供程序。使用 wsadmin,您将获得与从管理控制台创建时相同的所有属性。如果您需要的一些(但不是全部)属性在模板中,您可以按照您的建议使用 AdminConfig.create(...) 方法通过脚本添加这些属性。保存配置后,通过脚本创建的所有对象都可以在管理控制台中查看,包括自定义属性。


推荐阅读