Websphere 为 Postgresqs 创建数据源

Websphere create datasource for Postgresqs

我正在尝试在 websphere 上创建数据源 image:websphere-traditional:9.0.5.5-ubi8

我正在尝试为 Postgresql.Here 创建数据源是我在后 datasource.py 文件中执行的代码:

jdbcProvider = AdminTask.createJDBCProvider(
    '[-scope Node=DefaultNode01 -databaseType "User-defined" -providerType "User-defined JDBC Provider" -implementationType "User-defined" -name "Postgres JDBC Provider" -description "PostgreSQL JDBC Driver" -implementationClassName org.postgresql.jdbc3.Jdbc3ConnectionPool -classpath [/opt/postgres/postgresql-42.2.14.jar ] -nativePath "" ]')
print("jdbcProvider: "+jdbcProvider)

datasource = AdminTask.createDatasource(
    jdbcProvider, '[-name myname -jndiName jdbc/myjndiName -dataStoreHelperClassName com.ibm.websphere.rsadapter.GenericDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias DefaultNode01/DB_USER_POSTGRES -xaRecoveryAuthAlias DefaultNode01/DB_USER_POSTGRES -configureResourceProperties [[URL java.lang.String jdbc:postgresql://postgres:5432/postgres]]]')

print("datasource: " + datasource)

m = AdminConfig.create('MappingModule', datasource,
                       '[[authDataAlias DefaultNode01/DB_USER_POSTGRES] [mappingConfigAlias DefaultPrincipalMapping]]')
print("m: "+m)

AdminConfig.save()

我收到如下错误:

 exception information: com.ibm.ws.scripting.ScriptingException: WASX8018E: Cannot find a match for option value [URL, java.lang.String, jdbc:postgresql://postgres:5432/postgres] for step configureResourceProperties

但是当我使用带有 oracle-datasource.py 的 Oracle 数据库尝试它时。成功运行,没有任何错误。

jdbcProvider = AdminTask.createJDBCProvider(
    '[-scope Node=DefaultNode01 -databaseType Oracle -providerType "Oracle JDBC Driver" -implementationType "XA data source" -name "Oracle JDBC Driver (XA)" -description "Oracle JDBC Driver (XA)" -classpath [/opt/oracle/ojdbc8.jar ] -nativePath "" ]')

print("jdbcProvider: "+jdbcProvider)

datasource = AdminTask.createDatasource(
    jdbcProvider, '[-name myname -jndiName jdbc/myjndiName -dataStoreHelperClassName com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias DefaultNode01/APPMY_USER -xaRecoveryAuthAlias DefaultNode01/APPMY_USER -configureResourceProperties [[URL java.lang.String jdbc:oracle:thin:@oracle:1521/xepdb1]]]')
print("datasource: " + datasource)

我是否遗漏了 Postgresql 数据源的某些内容?

背景

与 Oracle 数据源的不同之处在于,对于 PostgreSQL,您使用的是用户定义的 JDBC 提供程序,因此您无法利用提供驱动程序集的 JDBC 特定于驱动程序的模板-WebSphere 产品附带的特定自定义属性。

解决方案

您可以像这样尝试将自定义 属性 添加到您的数据源:

datasource = # ... create from provider, e.g. as in the question

propSet = AdminConfig.showAttribute(datasource , 'propertySet')

name = ['name', 'URL']
value = ['value', 'jdbc:postgresql://postgres:5432/postgres']
rpAttrs = [name, value]
print AdminConfig.create('J2EEResourceProperty', propSet, rpAttrs)

(这似乎是 this 文档的意思,但它并未显示实际设置值。)