如何在 IBM Liberty Server 中设置 Greenplum 数据源
How to set a Greenplum datasource in IBM Liberty Server
我有一个 IBM WebSphere Liberty 服务器和一个 Greenplum 数据库。我希望自由服务器使用 SSL 连接 Greenplum。
这是我在 server.xml 中的设置:
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="javax.sql.DataSource">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbcx.GreenplumDataSource"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" URL="jdbc:pivotal:greenplum://10.x.x.1:5432;DatabaseName=postgres;EncryptionMethod=SSL;CryptoProtocolVersion=TLSv1.2;ValidateServerCertificate=false"/>
</dataSource>
<library id="GreenplumLib">
<file name="/data/IBM/WebSphere/Liberty/usr/lib/PROGRESS_DATADIRECT_JDBC_DRIVER_PIVOTAL_GREENPLUM_5.1.4.000275.jar"/>
</library>
一个简单的应用程序使用这个 JNDI 连接 Greenplum。我从应用程序中收到错误消息:
尝试连接:= jdbc/greenplum !!!未获得连接 = java.sql.SQLInvalidAuthorizationSpecException:[Pivotal][Greenplum JDBC Driver][Greenplum]no pg_hba.conf 主机“10.161.113.15”、用户“gpadmin”、数据库“postgres”的条目", SSL 关闭。 DSRA0010E:SQL 状态 = 28000,错误代码 = 0
数据源似乎没有使用SSL连接Greenplum。我的设置有问题吗?
这个驱动支持的属性的documentation并不表示它的DataSource有一个URL属性,所以我怀疑你放在[=19=下的所有东西] 属性被忽略。
尝试单独指定每个属性,如下所示,
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="javax.sql.DataSource">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbcx.GreenplumDataSource"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" encryptionMethod="SSL" cryptoProtocolVersion="TLSv1.2" validateServerCertificate="false"/>
</dataSource>
希望这会奏效。 JDBC 驱动程序的文档对于列出的属性是否都属于它们的 DataSource 或 DriverManager 或两者都不是很清楚。如果您最终需要通过 DriverManager 连接 Liberty,您可以在最新版本中将其配置为执行此操作,但让我们先尝试 DataSource 方法,看看它是否有效。
听起来问题是 Greenplum 的 pg_hba.conf 文件没有经过编辑以允许此主机连接(尽管上面列出的连接字符串可能存在问题)。您应该在 Greenplum 的 $MASTER_DATA_DIRECTORY 中向 pg_hba.con 添加一行,例如:
托管所有 gpadmin 10.161.113.0/24 md5
这将为 gpadmin 在 10.161.113 子网上连接的所有数据库设置连接。编辑文件后,运行 gpstop -u 更新整个集群的配置。
作为实际说明,这是尝试连接到 postgres 数据库。这不是一个好主意,因为它管理(我相信)系统目录数据库。您应该创建一个单独的数据库并尝试连接到该数据库。
吉姆
感谢您的回复。我已经解决了这个问题。我之前设置了错误的数据源类型和驱动程序class。这是正确的设置:
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="java.sql.Driver">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbc.GreenplumDriver"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" URL="jdbc:pivotal:greenplum://10.x.x.1:5432;DatabaseName=postgres;EncryptionMethod=SSL;CryptoProtocolVersion=TLSv1.2;ValidateServerCertificate=false"/>
</dataSource>
我有一个 IBM WebSphere Liberty 服务器和一个 Greenplum 数据库。我希望自由服务器使用 SSL 连接 Greenplum。
这是我在 server.xml 中的设置:
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="javax.sql.DataSource">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbcx.GreenplumDataSource"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" URL="jdbc:pivotal:greenplum://10.x.x.1:5432;DatabaseName=postgres;EncryptionMethod=SSL;CryptoProtocolVersion=TLSv1.2;ValidateServerCertificate=false"/>
</dataSource>
<library id="GreenplumLib">
<file name="/data/IBM/WebSphere/Liberty/usr/lib/PROGRESS_DATADIRECT_JDBC_DRIVER_PIVOTAL_GREENPLUM_5.1.4.000275.jar"/>
</library>
一个简单的应用程序使用这个 JNDI 连接 Greenplum。我从应用程序中收到错误消息:
尝试连接:= jdbc/greenplum !!!未获得连接 = java.sql.SQLInvalidAuthorizationSpecException:[Pivotal][Greenplum JDBC Driver][Greenplum]no pg_hba.conf 主机“10.161.113.15”、用户“gpadmin”、数据库“postgres”的条目", SSL 关闭。 DSRA0010E:SQL 状态 = 28000,错误代码 = 0
数据源似乎没有使用SSL连接Greenplum。我的设置有问题吗?
这个驱动支持的属性的documentation并不表示它的DataSource有一个URL属性,所以我怀疑你放在[=19=下的所有东西] 属性被忽略。
尝试单独指定每个属性,如下所示,
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="javax.sql.DataSource">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbcx.GreenplumDataSource"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" encryptionMethod="SSL" cryptoProtocolVersion="TLSv1.2" validateServerCertificate="false"/>
</dataSource>
希望这会奏效。 JDBC 驱动程序的文档对于列出的属性是否都属于它们的 DataSource 或 DriverManager 或两者都不是很清楚。如果您最终需要通过 DriverManager 连接 Liberty,您可以在最新版本中将其配置为执行此操作,但让我们先尝试 DataSource 方法,看看它是否有效。
听起来问题是 Greenplum 的 pg_hba.conf 文件没有经过编辑以允许此主机连接(尽管上面列出的连接字符串可能存在问题)。您应该在 Greenplum 的 $MASTER_DATA_DIRECTORY 中向 pg_hba.con 添加一行,例如:
托管所有 gpadmin 10.161.113.0/24 md5
这将为 gpadmin 在 10.161.113 子网上连接的所有数据库设置连接。编辑文件后,运行 gpstop -u 更新整个集群的配置。
作为实际说明,这是尝试连接到 postgres 数据库。这不是一个好主意,因为它管理(我相信)系统目录数据库。您应该创建一个单独的数据库并尝试连接到该数据库。 吉姆
感谢您的回复。我已经解决了这个问题。我之前设置了错误的数据源类型和驱动程序class。这是正确的设置:
<dataSource id="GreenplumDataSource" jndiName="jdbc/greenplum" type="java.sql.Driver">
<jdbcDriver libraryRef="GreenplumLib" javax.sql.DataSource="com.pivotal.jdbc.GreenplumDriver"/>
<properties databaseName="postgres" serverName="10.x.x.1" portNumber="5432" user="x" password="x" URL="jdbc:pivotal:greenplum://10.x.x.1:5432;DatabaseName=postgres;EncryptionMethod=SSL;CryptoProtocolVersion=TLSv1.2;ValidateServerCertificate=false"/>
</dataSource>