Java 11 миграция - createConnectionBuilder () из PoolDataSourceImpl конфликтует с createConnectionBuilder () из javax. sql .DataSource - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь перенести проект с Java 8 на Java 11, который использует ojdb c. Я использую класс, который расширяет PoolDataSourceImpl, который реализует PooLDataSource, который расширяет javax. sql .DataSource, и при попытке построить его с помощью Maven выдает эту ошибку:

Ошибка компиляции [ERROR] createConnectionBuilder () в oracle .ucp.jdb c .PoolDataSourceImpl не может реализовать функцию create ConnectionBuilder () в javax. sql .DataSource [ОШИБКА] тип возвращаемого значения oracle .ucp.jdb c .UCPConnectionBuilder не совместим с java. sql .ConnectionBuilder

У кого-нибудь есть предложения?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Проблема в том, что вы пытаетесь создать подкласс PoolDataSourceImpl, который является классом c, определяемым поставщиком, скомпилированным с JDK8, и мы не поддерживаем расширение наших классов, если мы явно не предлагаем это сделать, как в этом блоге ; и это верно для всех поставщиков программного обеспечения. В рамках этого ограничения наши драйверы (ojdbc8.jar, ucp.jar) совместимы с новыми версиями JDK (т. Е. Работают с JDK11) и базами данных.

0 голосов
/ 16 апреля 2020

Это несовместимость интерфейса. javax.sql.DataSource определяет метод

default ConnectionBuilder createConnectionBuilder() throws SQLException

И согласно контракту возвращаемое значение должно иметь тип ConnectionBuilder.

Если вы посмотрите на документацию oracle .ucp.jdb c .PoolDataSourceImpl, он определяет метод как

public UCPConnectionBuilder createConnectionBuilder()

, тогда как oracle.ucp.jdbc.UCPConnectionBuilder не является подтипом java.sql.ConnectionBuilder.

Теперь, если Oracle не выпустит никогда версию версии oracle.ucp.jdbc.UCPConnectionBuilder, которая расширяет java.sql.ConnectionBuilder, вы не сможете обменять UCP PoolDataSource с javax.sql.DataSource.

Последним выпуском на данный момент является UCP 19.3 , что по-прежнему может привести к той же проблеме, что вызывает сожаление, поскольку 19.3 объявлен как JDK11-совместимый. Пожалуйста, поднимите ошибку в Oracle UCP, чтобы информировать сопровождающих о новом участнике createConnectionBuilder в интерфейсе DataSource.

В Intrim, если это возможно, вы можете использовать 11g выпуск 2 UCP (не 12, не 19), у которого нет метода createConnectionBuilder в интерфейсе PoolDataSource. Не идеальная ситуация, поскольку вы отказываетесь от десятилетних улучшений UCP, возвращаясь к 11g.

...