[ 
https://issues.apache.org/jira/browse/OPENJPA-2915?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dominik Stadler updated OPENJPA-2915:
-------------------------------------
    Description: 
When upgrading commons-dbcp2 to the latest version 2.10.0, OpenJPA fails with 
exceptions when it tries to provide options to commons-dbcp2.

It seems this happens because dbcp2 moved from Integer-Duration to using 
java.time.Duration.

See 
[https://github.com/apache/commons-dbcp/commit/93207813fd6b6c0230cfcebb0e9f5b19e9fa72b9]

It seems that even though the change in dbcp2 was done in a 
backwards-compatible way, the automatic configuration handling in OpenJPA 
stumbles and throws an exception when latest commons-dbcp2 (and commons-pool2) 
are used:
{noformat}
Caused by: org.apache.openjpa.lib.util.ParseException: 
org.apache.commons.dbcp2.BasicDataSource@72eed4db.MaxWait = 10000
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:234)
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:187)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:502)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:456)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:436)
        at 
app//org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:169)
        at 
app//org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:112)
        ... 63 more
Caused by: org.apache.openjpa.lib.util.ParseException: Error initializing 
configuration. Failed to create an instance of class java.time.Duration for 
plugin property 10000.
        at 
app//org.apache.openjpa.lib.util.Options.stringToObject(Options.java:449)
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:226)
        ... 69 more
Caused by: java.lang.ClassNotFoundException: 10000
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at org.apache.openjpa.lib.util.Options.stringToObject(Options.java:446)
        ... 70 more
{noformat}
 

It should be possible to reproduce with a small OpenJPA sample project and 
adding the following two newer Gradle dependencies:
{noformat}
implementation 'org.apache.commons:commons-dbcp2:2.9.0'
implementation 'org.apache.commons:commons-pool2:2.11.1'{noformat}

  was:
When upgrading commons-dbcp2 to the latest version 2.10.0, OpenJPA fails with 
exceptions when it tries to provide options to commons-dbcp2.

It seems this happens because dbcp2 moved from Integer-Duration to using 
java.time.Duration.

See 
https://github.com/apache/commons-dbcp/commit/93207813fd6b6c0230cfcebb0e9f5b19e9fa72b9

It seems that even though the change in dbcp2 was done in a 
backwards-compatible way, the automatic configuration handling in OpenJPA 
stumbles and throws an exception when latest commons-dbcp2 (and commons-pool2) 
are used:
{noformat}
Caused by: org.apache.openjpa.lib.util.ParseException: 
org.apache.commons.dbcp2.BasicDataSource@72eed4db.MaxWait = 10000
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:234)
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:187)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:502)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:456)
        at 
app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:436)
        at 
app//org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:169)
        at 
app//org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:112)
        ... 63 more
Caused by: org.apache.openjpa.lib.util.ParseException: Error initializing 
configuration. Failed to create an instance of class java.time.Duration for 
plugin property 10000.
        at 
app//org.apache.openjpa.lib.util.Options.stringToObject(Options.java:449)
        at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:226)
        ... 69 more
Caused by: java.lang.ClassNotFoundException: 10000
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at org.apache.openjpa.lib.util.Options.stringToObject(Options.java:446)
        ... 70 more
{noformat}


> Newer commons-dbcp2 breaks OpenJPa
> ----------------------------------
>
>                 Key: OPENJPA-2915
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2915
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: third-party
>    Affects Versions: 3.2.2
>            Reporter: Dominik Stadler
>            Priority: Minor
>
> When upgrading commons-dbcp2 to the latest version 2.10.0, OpenJPA fails with 
> exceptions when it tries to provide options to commons-dbcp2.
> It seems this happens because dbcp2 moved from Integer-Duration to using 
> java.time.Duration.
> See 
> [https://github.com/apache/commons-dbcp/commit/93207813fd6b6c0230cfcebb0e9f5b19e9fa72b9]
> It seems that even though the change in dbcp2 was done in a 
> backwards-compatible way, the automatic configuration handling in OpenJPA 
> stumbles and throws an exception when latest commons-dbcp2 (and 
> commons-pool2) are used:
> {noformat}
> Caused by: org.apache.openjpa.lib.util.ParseException: 
> org.apache.commons.dbcp2.BasicDataSource@72eed4db.MaxWait = 10000
>       at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:234)
>       at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:187)
>       at 
> app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:502)
>       at 
> app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:456)
>       at 
> app//org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:436)
>       at 
> app//org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:169)
>       at 
> app//org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:112)
>       ... 63 more
> Caused by: org.apache.openjpa.lib.util.ParseException: Error initializing 
> configuration. Failed to create an instance of class java.time.Duration for 
> plugin property 10000.
>       at 
> app//org.apache.openjpa.lib.util.Options.stringToObject(Options.java:449)
>       at app//org.apache.openjpa.lib.util.Options.setInto(Options.java:226)
>       ... 69 more
> Caused by: java.lang.ClassNotFoundException: 10000
>       at 
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>       at 
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>       at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
>       at java.base/java.lang.Class.forName0(Native Method)
>       at java.base/java.lang.Class.forName(Class.java:315)
>       at org.apache.openjpa.lib.util.Options.stringToObject(Options.java:446)
>       ... 70 more
> {noformat}
>  
> It should be possible to reproduce with a small OpenJPA sample project and 
> adding the following two newer Gradle dependencies:
> {noformat}
> implementation 'org.apache.commons:commons-dbcp2:2.9.0'
> implementation 'org.apache.commons:commons-pool2:2.11.1'{noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to