You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2021/03/18 15:51:32 UTC

[arthur] Launching openjpa/derby support?

Hi all,

Just to let you know, I just pushed an "openjpa" branch on arthur
repository.
It contains two new modules/knights: openjpa and derby.
Goal is to be able to use openjpa in a native app easily (it is already
doable with a lot of conf).

integration-test/src/test/resources/integration-tests/openjpa
<https://github.com/apache/geronimo-arthur/tree/openjpa/integration-test/src/test/resources/integration-tests/openjpa>
provides
the test I'm trying to run.
It is not yet a setup which can be merged but current setup enables to run
the test from this folder using "mvn clean package -Parthur
arthur:native-image@runtime && ./target/openjpa.graal.bin
-Dorg.slf4j.simpleLogger.defaultLogLevel=INFO" command. It means that if
you modify derby/openjpa knight, you recompile the knight (mvn install) and
can rerun this command from the test folder directly to see if it changes
something/works - it is faster than recompiling everything or going through
docker test layer.

It seems that openjpa EMF started and fails when sending DDL to derby due
to a threadlocal issue:

Exception in thread "main" <openjpa-0.0.0-rnull nonfatal general
error> org.apache.openjpa.persistence.PersistenceException: XJ001.U :
[0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT
FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e
getContextOrNull=null
	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:625)
	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:489)
	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:177)
	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:182)
	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:138)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:166)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:262)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:177)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:167)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:64)
	at org.apache.geronimo.arthur.integrationtests.OpenJPAMain.main(OpenJPAMain.java:77)
Caused by: java.sql.SQLException: XJ001.U : [0]
org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED
lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e
getContextOrNull=null
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:274)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3642)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3686)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3713)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetCols(EmbedDatabaseMetaData.java:1969)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getColumns(EmbedDatabaseMetaData.java:1941)
	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingDatabaseMetaData.getColumns(LoggingConnectionDecorator.java:737)
	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
	at org.apache.openjpa.jdbc.sql.DBDictionary.getColumns(DBDictionary.java:4428)
	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(SchemaGenerator.java:532)
	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:368)
	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:303)
	at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1314)
	at org.apache.openjpa.jdbc.schema.SchemaTool.drop(SchemaTool.java:410)
	at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:375)
	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:571)
	... 11 more
Caused by: ERROR XJ001: XJ001.U : [0]
org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED
lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e
getContextOrNull=null
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
	... 36 more
Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT
FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e
getContextOrNull=null
	at org.apache.derby.shared.common.sanity.SanityManager.ASSERT(SanityManager.java:120)
	at org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:245)
	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(EmbedConnection.java:2889)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(EmbedDatabaseMetaData.java:3803)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3635)
	... 28 more


The not debug mode looks more raw - yeah, jdbc driver still publish not
debuggable jars but derby is easy to build from sources and then you can
set it as systemPath in the pom to debug:

Caused by: ERROR XJ001: XJ001.U : [0] java.lang.NullPointerException, [1]
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
Source)
... 42 more
Caused by: java.lang.NullPointerException
at org.apache.derby.impl.sql.compile.CastNode.bindCastNodeOnly(Unknown
Source)
at org.apache.derby.impl.sql.compile.CastNode.bindExpression(Unknown Source)
at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
Source)
at
org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown
Source)
at
org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown Source)
at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown
Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
Source)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
Source)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
Source)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
Source)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
Source)
at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
Source)
... 34 more

Overall it is mainly about making derby graalifyable I think.
I need to switch to another topic for a moment so if anyone wants to
continue the experimentations just jump in.

The small side notes I can gives are:

1. we can do a dbcp2-knight and a commons-logging-knight (for now they are
in openjpa one - it is commented as such), these ones should be easy since
already coded, just not packaged properly
2. the immediate fix for deby will likely sit either
in org.apache.geronimo.arthur.knight.derby.DerbyExtension or a substitution
in the same module
3. if easier we can use another database (h2 does not work and will likely
not work in embedded mode so hsqldb can be saner - at least I don't know
for this one)

If you are motivated to proove openjpa runs in native mode and finish this
branch, don't hesitate to answer this thread, I'd also be happy to discuss
more on slack or by mail details if it helps.

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>

Re: [arthur] Launching openjpa/derby support?

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Seems hsqldb is the one, have to admit I was expecting derby to be easier
but seems their runtime reflection and bytecode generation makes it
actually a bad candidate for now. Anyway happy to not have to use another
docker container to test openjpa :).

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le ven. 19 mars 2021 à 21:09, Romain Manni-Bucau <rm...@gmail.com> a
écrit :

> Hsqldb works well with jpa - it is tomee default ;) - and probably last
> one to try.
> I still hope to be able to pregenerate derby code at some point but will
> follow that advice short term - until you want to give it a try ;).
>
> Le ven. 19 mars 2021 à 20:27, Raymond Augé <ra...@liferay.com> a
> écrit :
>
>> What about hypersonic? No reason it shouldn't work with jpa but not sure
>> about native image.
>>
>> On Fri, Mar 19, 2021 at 12:33 PM Romain Manni-Bucau <
>> rmannibucau@gmail.com> wrote:
>>
>>> Quick follow up: derby has some runtime code generation+loading (see my
>>> last comment on https://issues.apache.org/jira/browse/DERBY-7108) so it
>>> can not be the simplest solution to get openjpa knight. What about a fake
>>> driver to validate openjpa and see if we can come with a java 8 (seems
>>> their last release is j9 :s) solution with derby? Worse case we can move to
>>> a remote connection for the DB and reuse test containers we already have in
>>> the project.
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>> <http://rmannibucau.wordpress.com> | Github
>>> <https://github.com/rmannibucau> | LinkedIn
>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>
>>>
>>> Le jeu. 18 mars 2021 à 16:51, Romain Manni-Bucau <rm...@gmail.com>
>>> a écrit :
>>>
>>>> Hi all,
>>>>
>>>> Just to let you know, I just pushed an "openjpa" branch on arthur
>>>> repository.
>>>> It contains two new modules/knights: openjpa and derby.
>>>> Goal is to be able to use openjpa in a native app easily (it is already
>>>> doable with a lot of conf).
>>>>
>>>> integration-test/src/test/resources/integration-tests/openjpa
>>>> <https://github.com/apache/geronimo-arthur/tree/openjpa/integration-test/src/test/resources/integration-tests/openjpa> provides
>>>> the test I'm trying to run.
>>>> It is not yet a setup which can be merged but current setup enables to
>>>> run the test from this folder using "mvn clean package -Parthur
>>>> arthur:native-image@runtime && ./target/openjpa.graal.bin
>>>> -Dorg.slf4j.simpleLogger.defaultLogLevel=INFO" command. It means that
>>>> if you modify derby/openjpa knight, you recompile the knight (mvn install)
>>>> and can rerun this command from the test folder directly to see if it
>>>> changes something/works - it is faster than recompiling everything or going
>>>> through docker test layer.
>>>>
>>>> It seems that openjpa EMF started and fails when sending DDL to derby
>>>> due to a threadlocal issue:
>>>>
>>>> Exception in thread "main" <openjpa-0.0.0-rnull nonfatal general error> org.apache.openjpa.persistence.PersistenceException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:625)
>>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:489)
>>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:177)
>>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:182)
>>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:138)
>>>> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
>>>> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:166)
>>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:262)
>>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:177)
>>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:167)
>>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:64)
>>>> 	at org.apache.geronimo.arthur.integrationtests.OpenJPAMain.main(OpenJPAMain.java:77)
>>>> Caused by: java.sql.SQLException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
>>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
>>>> 	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
>>>> 	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:274)
>>>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
>>>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>>>> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
>>>> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3642)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3686)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3713)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetCols(EmbedDatabaseMetaData.java:1969)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getColumns(EmbedDatabaseMetaData.java:1941)
>>>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>>>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>>>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>>>> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingDatabaseMetaData.getColumns(LoggingConnectionDecorator.java:737)
>>>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>>>> 	at org.apache.openjpa.jdbc.sql.DBDictionary.getColumns(DBDictionary.java:4428)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(SchemaGenerator.java:532)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:368)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:303)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1314)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.drop(SchemaTool.java:410)
>>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:375)
>>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:571)
>>>> 	... 11 more
>>>> Caused by: ERROR XJ001: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
>>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
>>>> 	... 36 more
>>>> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>>> 	at org.apache.derby.shared.common.sanity.SanityManager.ASSERT(SanityManager.java:120)
>>>> 	at org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:245)
>>>> 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(EmbedConnection.java:2889)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(EmbedDatabaseMetaData.java:3803)
>>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3635)
>>>> 	... 28 more
>>>>
>>>>
>>>> The not debug mode looks more raw - yeah, jdbc driver still publish not
>>>> debuggable jars but derby is easy to build from sources and then you can
>>>> set it as systemPath in the pom to debug:
>>>>
>>>> Caused by: ERROR XJ001: XJ001.U : [0] java.lang.NullPointerException,
>>>> [1]
>>>> at
>>>> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
>>>> Source)
>>>> ... 42 more
>>>> Caused by: java.lang.NullPointerException
>>>> at org.apache.derby.impl.sql.compile.CastNode.bindCastNodeOnly(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.compile.CastNode.bindExpression(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>>>> at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>>>> Source)
>>>> at
>>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown
>>>> Source)
>>>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>>>> at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>>>> at
>>>> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>>>> Source)
>>>> ... 34 more
>>>>
>>>> Overall it is mainly about making derby graalifyable I think.
>>>> I need to switch to another topic for a moment so if anyone wants to
>>>> continue the experimentations just jump in.
>>>>
>>>> The small side notes I can gives are:
>>>>
>>>> 1. we can do a dbcp2-knight and a commons-logging-knight (for now they
>>>> are in openjpa one - it is commented as such), these ones should be easy
>>>> since already coded, just not packaged properly
>>>> 2. the immediate fix for deby will likely sit either
>>>> in org.apache.geronimo.arthur.knight.derby.DerbyExtension or a substitution
>>>> in the same module
>>>> 3. if easier we can use another database (h2 does not work and will
>>>> likely not work in embedded mode so hsqldb can be saner - at least I don't
>>>> know for this one)
>>>>
>>>> If you are motivated to proove openjpa runs in native mode and finish
>>>> this branch, don't hesitate to answer this thread, I'd also be happy to
>>>> discuss more on slack or by mail details if it helps.
>>>>
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>>> <http://rmannibucau.wordpress.com> | Github
>>>> <https://github.com/rmannibucau> | LinkedIn
>>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>>> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>>
>>>
>>
>> --
>> *Raymond Augé* (@rotty3000)
>> Senior Software Architect *Liferay, Inc.* (@Liferay)
>> OSGi Fellow
>>
>

Re: [arthur] Launching openjpa/derby support?

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hsqldb works well with jpa - it is tomee default ;) - and probably last one
to try.
I still hope to be able to pregenerate derby code at some point but will
follow that advice short term - until you want to give it a try ;).

Le ven. 19 mars 2021 à 20:27, Raymond Augé <ra...@liferay.com> a
écrit :

> What about hypersonic? No reason it shouldn't work with jpa but not sure
> about native image.
>
> On Fri, Mar 19, 2021 at 12:33 PM Romain Manni-Bucau <rm...@gmail.com>
> wrote:
>
>> Quick follow up: derby has some runtime code generation+loading (see my
>> last comment on https://issues.apache.org/jira/browse/DERBY-7108) so it
>> can not be the simplest solution to get openjpa knight. What about a fake
>> driver to validate openjpa and see if we can come with a java 8 (seems
>> their last release is j9 :s) solution with derby? Worse case we can move to
>> a remote connection for the DB and reuse test containers we already have in
>> the project.
>>
>> Romain Manni-Bucau
>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> <https://rmannibucau.metawerx.net/> | Old Blog
>> <http://rmannibucau.wordpress.com> | Github
>> <https://github.com/rmannibucau> | LinkedIn
>> <https://www.linkedin.com/in/rmannibucau> | Book
>> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>
>>
>> Le jeu. 18 mars 2021 à 16:51, Romain Manni-Bucau <rm...@gmail.com>
>> a écrit :
>>
>>> Hi all,
>>>
>>> Just to let you know, I just pushed an "openjpa" branch on arthur
>>> repository.
>>> It contains two new modules/knights: openjpa and derby.
>>> Goal is to be able to use openjpa in a native app easily (it is already
>>> doable with a lot of conf).
>>>
>>> integration-test/src/test/resources/integration-tests/openjpa
>>> <https://github.com/apache/geronimo-arthur/tree/openjpa/integration-test/src/test/resources/integration-tests/openjpa> provides
>>> the test I'm trying to run.
>>> It is not yet a setup which can be merged but current setup enables to
>>> run the test from this folder using "mvn clean package -Parthur
>>> arthur:native-image@runtime && ./target/openjpa.graal.bin
>>> -Dorg.slf4j.simpleLogger.defaultLogLevel=INFO" command. It means that
>>> if you modify derby/openjpa knight, you recompile the knight (mvn install)
>>> and can rerun this command from the test folder directly to see if it
>>> changes something/works - it is faster than recompiling everything or going
>>> through docker test layer.
>>>
>>> It seems that openjpa EMF started and fails when sending DDL to derby
>>> due to a threadlocal issue:
>>>
>>> Exception in thread "main" <openjpa-0.0.0-rnull nonfatal general error> org.apache.openjpa.persistence.PersistenceException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:625)
>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:489)
>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:177)
>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:182)
>>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:138)
>>> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
>>> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:166)
>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:262)
>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:177)
>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:167)
>>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:64)
>>> 	at org.apache.geronimo.arthur.integrationtests.OpenJPAMain.main(OpenJPAMain.java:77)
>>> Caused by: java.sql.SQLException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
>>> 	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
>>> 	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:274)
>>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
>>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>>> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
>>> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3642)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3686)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3713)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetCols(EmbedDatabaseMetaData.java:1969)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getColumns(EmbedDatabaseMetaData.java:1941)
>>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>>> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingDatabaseMetaData.getColumns(LoggingConnectionDecorator.java:737)
>>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>>> 	at org.apache.openjpa.jdbc.sql.DBDictionary.getColumns(DBDictionary.java:4428)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(SchemaGenerator.java:532)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:368)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:303)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1314)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.drop(SchemaTool.java:410)
>>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:375)
>>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:571)
>>> 	... 11 more
>>> Caused by: ERROR XJ001: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
>>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
>>> 	... 36 more
>>> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>>> 	at org.apache.derby.shared.common.sanity.SanityManager.ASSERT(SanityManager.java:120)
>>> 	at org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:245)
>>> 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(EmbedConnection.java:2889)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(EmbedDatabaseMetaData.java:3803)
>>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3635)
>>> 	... 28 more
>>>
>>>
>>> The not debug mode looks more raw - yeah, jdbc driver still publish not
>>> debuggable jars but derby is easy to build from sources and then you can
>>> set it as systemPath in the pom to debug:
>>>
>>> Caused by: ERROR XJ001: XJ001.U : [0] java.lang.NullPointerException,
>>> [1]
>>> at
>>> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
>>> Source)
>>> ... 42 more
>>> Caused by: java.lang.NullPointerException
>>> at org.apache.derby.impl.sql.compile.CastNode.bindCastNodeOnly(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.CastNode.bindExpression(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
>>> Source)
>>> at
>>> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown
>>> Source)
>>> at
>>> org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>>> at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
>>> Source)
>>> at
>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
>>> Source)
>>> at
>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
>>> Source)
>>> at
>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>>> Source)
>>> at
>>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>>> Source)
>>> at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown Source)
>>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>>> at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>>> at
>>> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>>> Source)
>>> ... 34 more
>>>
>>> Overall it is mainly about making derby graalifyable I think.
>>> I need to switch to another topic for a moment so if anyone wants to
>>> continue the experimentations just jump in.
>>>
>>> The small side notes I can gives are:
>>>
>>> 1. we can do a dbcp2-knight and a commons-logging-knight (for now they
>>> are in openjpa one - it is commented as such), these ones should be easy
>>> since already coded, just not packaged properly
>>> 2. the immediate fix for deby will likely sit either
>>> in org.apache.geronimo.arthur.knight.derby.DerbyExtension or a substitution
>>> in the same module
>>> 3. if easier we can use another database (h2 does not work and will
>>> likely not work in embedded mode so hsqldb can be saner - at least I don't
>>> know for this one)
>>>
>>> If you are motivated to proove openjpa runs in native mode and finish
>>> this branch, don't hesitate to answer this thread, I'd also be happy to
>>> discuss more on slack or by mail details if it helps.
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>> <http://rmannibucau.wordpress.com> | Github
>>> <https://github.com/rmannibucau> | LinkedIn
>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>
>>
>
> --
> *Raymond Augé* (@rotty3000)
> Senior Software Architect *Liferay, Inc.* (@Liferay)
> OSGi Fellow
>

Re: [arthur] Launching openjpa/derby support?

Posted by Raymond Augé <ra...@liferay.com>.
What about hypersonic? No reason it shouldn't work with jpa but not sure
about native image.

On Fri, Mar 19, 2021 at 12:33 PM Romain Manni-Bucau <rm...@gmail.com>
wrote:

> Quick follow up: derby has some runtime code generation+loading (see my
> last comment on https://issues.apache.org/jira/browse/DERBY-7108) so it
> can not be the simplest solution to get openjpa knight. What about a fake
> driver to validate openjpa and see if we can come with a java 8 (seems
> their last release is j9 :s) solution with derby? Worse case we can move to
> a remote connection for the DB and reuse test containers we already have in
> the project.
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Book
> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>
>
> Le jeu. 18 mars 2021 à 16:51, Romain Manni-Bucau <rm...@gmail.com>
> a écrit :
>
>> Hi all,
>>
>> Just to let you know, I just pushed an "openjpa" branch on arthur
>> repository.
>> It contains two new modules/knights: openjpa and derby.
>> Goal is to be able to use openjpa in a native app easily (it is already
>> doable with a lot of conf).
>>
>> integration-test/src/test/resources/integration-tests/openjpa
>> <https://github.com/apache/geronimo-arthur/tree/openjpa/integration-test/src/test/resources/integration-tests/openjpa> provides
>> the test I'm trying to run.
>> It is not yet a setup which can be merged but current setup enables to
>> run the test from this folder using "mvn clean package -Parthur
>> arthur:native-image@runtime && ./target/openjpa.graal.bin
>> -Dorg.slf4j.simpleLogger.defaultLogLevel=INFO" command. It means that if
>> you modify derby/openjpa knight, you recompile the knight (mvn install) and
>> can rerun this command from the test folder directly to see if it changes
>> something/works - it is faster than recompiling everything or going through
>> docker test layer.
>>
>> It seems that openjpa EMF started and fails when sending DDL to derby due
>> to a threadlocal issue:
>>
>> Exception in thread "main" <openjpa-0.0.0-rnull nonfatal general error> org.apache.openjpa.persistence.PersistenceException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:625)
>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:489)
>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:177)
>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:182)
>> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:138)
>> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
>> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:166)
>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:262)
>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:177)
>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:167)
>> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:64)
>> 	at org.apache.geronimo.arthur.integrationtests.OpenJPAMain.main(OpenJPAMain.java:77)
>> Caused by: java.sql.SQLException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
>> 	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
>> 	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:274)
>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
>> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
>> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3642)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3686)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3713)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetCols(EmbedDatabaseMetaData.java:1969)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getColumns(EmbedDatabaseMetaData.java:1941)
>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingDatabaseMetaData.getColumns(LoggingConnectionDecorator.java:737)
>> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
>> 	at org.apache.openjpa.jdbc.sql.DBDictionary.getColumns(DBDictionary.java:4428)
>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(SchemaGenerator.java:532)
>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:368)
>> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:303)
>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1314)
>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.drop(SchemaTool.java:410)
>> 	at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:375)
>> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:571)
>> 	... 11 more
>> Caused by: ERROR XJ001: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
>> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
>> 	... 36 more
>> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
>> 	at org.apache.derby.shared.common.sanity.SanityManager.ASSERT(SanityManager.java:120)
>> 	at org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:245)
>> 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(EmbedConnection.java:2889)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(EmbedDatabaseMetaData.java:3803)
>> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3635)
>> 	... 28 more
>>
>>
>> The not debug mode looks more raw - yeah, jdbc driver still publish not
>> debuggable jars but derby is easy to build from sources and then you can
>> set it as systemPath in the pom to debug:
>>
>> Caused by: ERROR XJ001: XJ001.U : [0] java.lang.NullPointerException, [1]
>> at
>> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
>> Source)
>> ... 42 more
>> Caused by: java.lang.NullPointerException
>> at org.apache.derby.impl.sql.compile.CastNode.bindCastNodeOnly(Unknown
>> Source)
>> at org.apache.derby.impl.sql.compile.CastNode.bindExpression(Unknown
>> Source)
>> at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
>> Source)
>> at
>> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
>> Source)
>> at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown
>> Source)
>> at
>> org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
>> Source)
>> at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown Source)
>> at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown
>> Source)
>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>> at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
>> Source)
>> at
>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
>> Source)
>> at
>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
>> Source)
>> at
>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>> Source)
>> at
>> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
>> Source)
>> at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown Source)
>> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>> at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>> at
>> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>> Source)
>> ... 34 more
>>
>> Overall it is mainly about making derby graalifyable I think.
>> I need to switch to another topic for a moment so if anyone wants to
>> continue the experimentations just jump in.
>>
>> The small side notes I can gives are:
>>
>> 1. we can do a dbcp2-knight and a commons-logging-knight (for now they
>> are in openjpa one - it is commented as such), these ones should be easy
>> since already coded, just not packaged properly
>> 2. the immediate fix for deby will likely sit either
>> in org.apache.geronimo.arthur.knight.derby.DerbyExtension or a substitution
>> in the same module
>> 3. if easier we can use another database (h2 does not work and will
>> likely not work in embedded mode so hsqldb can be saner - at least I don't
>> know for this one)
>>
>> If you are motivated to proove openjpa runs in native mode and finish
>> this branch, don't hesitate to answer this thread, I'd also be happy to
>> discuss more on slack or by mail details if it helps.
>>
>> Romain Manni-Bucau
>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> <https://rmannibucau.metawerx.net/> | Old Blog
>> <http://rmannibucau.wordpress.com> | Github
>> <https://github.com/rmannibucau> | LinkedIn
>> <https://www.linkedin.com/in/rmannibucau> | Book
>> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>
>

-- 
*Raymond Augé* (@rotty3000)
Senior Software Architect *Liferay, Inc.* (@Liferay)
OSGi Fellow

Re: [arthur] Launching openjpa/derby support?

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Quick follow up: derby has some runtime code generation+loading (see my
last comment on https://issues.apache.org/jira/browse/DERBY-7108) so it can
not be the simplest solution to get openjpa knight. What about a fake
driver to validate openjpa and see if we can come with a java 8 (seems
their last release is j9 :s) solution with derby? Worse case we can move to
a remote connection for the DB and reuse test containers we already have in
the project.

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le jeu. 18 mars 2021 à 16:51, Romain Manni-Bucau <rm...@gmail.com> a
écrit :

> Hi all,
>
> Just to let you know, I just pushed an "openjpa" branch on arthur
> repository.
> It contains two new modules/knights: openjpa and derby.
> Goal is to be able to use openjpa in a native app easily (it is already
> doable with a lot of conf).
>
> integration-test/src/test/resources/integration-tests/openjpa
> <https://github.com/apache/geronimo-arthur/tree/openjpa/integration-test/src/test/resources/integration-tests/openjpa> provides
> the test I'm trying to run.
> It is not yet a setup which can be merged but current setup enables to run
> the test from this folder using "mvn clean package -Parthur
> arthur:native-image@runtime && ./target/openjpa.graal.bin
> -Dorg.slf4j.simpleLogger.defaultLogLevel=INFO" command. It means that if
> you modify derby/openjpa knight, you recompile the knight (mvn install) and
> can rerun this command from the test folder directly to see if it changes
> something/works - it is faster than recompiling everything or going through
> docker test layer.
>
> It seems that openjpa EMF started and fails when sending DDL to derby due
> to a threadlocal issue:
>
> Exception in thread "main" <openjpa-0.0.0-rnull nonfatal general error> org.apache.openjpa.persistence.PersistenceException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:625)
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:489)
> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:177)
> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:182)
> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:138)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:166)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:262)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:177)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:167)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:64)
> 	at org.apache.geronimo.arthur.integrationtests.OpenJPAMain.main(OpenJPAMain.java:77)
> Caused by: java.sql.SQLException: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
> 	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
> 	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:274)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3642)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3686)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(EmbedDatabaseMetaData.java:3713)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetCols(EmbedDatabaseMetaData.java:1969)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getColumns(EmbedDatabaseMetaData.java:1941)
> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
> 	at org.apache.commons.dbcp2.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:227)
> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingDatabaseMetaData.getColumns(LoggingConnectionDecorator.java:737)
> 	at org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getColumns(DelegatingDatabaseMetaData.java:137)
> 	at org.apache.openjpa.jdbc.sql.DBDictionary.getColumns(DBDictionary.java:4428)
> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(SchemaGenerator.java:532)
> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:368)
> 	at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:303)
> 	at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1314)
> 	at org.apache.openjpa.jdbc.schema.SchemaTool.drop(SchemaTool.java:410)
> 	at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:375)
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:571)
> 	... 11 more
> Caused by: ERROR XJ001: XJ001.U : [0] org.apache.derby.shared.common.sanity.AssertFailure, [1] ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
> 	... 36 more
> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED lcc=org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext@24a77e1e getContextOrNull=null
> 	at org.apache.derby.shared.common.sanity.SanityManager.ASSERT(SanityManager.java:120)
> 	at org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:245)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(EmbedConnection.java:2889)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(EmbedDatabaseMetaData.java:3803)
> 	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(EmbedDatabaseMetaData.java:3635)
> 	... 28 more
>
>
> The not debug mode looks more raw - yeah, jdbc driver still publish not
> debuggable jars but derby is easy to build from sources and then you can
> set it as systemPath in the pom to debug:
>
> Caused by: ERROR XJ001: XJ001.U : [0] java.lang.NullPointerException, [1]
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
> Source)
> ... 42 more
> Caused by: java.lang.NullPointerException
> at org.apache.derby.impl.sql.compile.CastNode.bindCastNodeOnly(Unknown
> Source)
> at org.apache.derby.impl.sql.compile.CastNode.bindExpression(Unknown
> Source)
> at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
> Source)
> at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
> Source)
> at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown Source)
> at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
> at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
> Source)
> at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown Source)
> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
> at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
> Source)
> ... 34 more
>
> Overall it is mainly about making derby graalifyable I think.
> I need to switch to another topic for a moment so if anyone wants to
> continue the experimentations just jump in.
>
> The small side notes I can gives are:
>
> 1. we can do a dbcp2-knight and a commons-logging-knight (for now they are
> in openjpa one - it is commented as such), these ones should be easy since
> already coded, just not packaged properly
> 2. the immediate fix for deby will likely sit either
> in org.apache.geronimo.arthur.knight.derby.DerbyExtension or a substitution
> in the same module
> 3. if easier we can use another database (h2 does not work and will likely
> not work in embedded mode so hsqldb can be saner - at least I don't know
> for this one)
>
> If you are motivated to proove openjpa runs in native mode and finish this
> branch, don't hesitate to answer this thread, I'd also be happy to discuss
> more on slack or by mail details if it helps.
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Book
> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>