npgall / cqengine

Ultra-fast SQL-like queries on Java collections
Apache License 2.0
1.72k stars 253 forks source link

Support for ANTLR 4.10.1 #307

Open jvissers opened 2 years ago

jvissers commented 2 years ago

I'm upgrading a code base that uses cqengine to Jakarta EE 9.0. It uses Hibernate, and that uses ANTLR 4.10.1. This causes problems for CQEngine like this:

Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 3 (expected 4).
    at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:56)
    at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:48)
    at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarLexer.<clinit>(SQLGrammarLexer.java:809)
    ... 126 more
Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 3 (expected 4).
    ... 129 more

We also get warnings like this:

ANTLR Tool version 4.7 used for code generation does not match the current runtime version 4.10.1
ANTLR Runtime version 4.7.2 used for parser compilation does not match the current runtime version 4.10.1

What can we do about this?

npgall commented 2 years ago

Thank you for this PR! I am planning to take some time to prepare a CQEngine release in the next few weeks, and will include this.

jvissers commented 2 years ago

That's great news! Really looking forward to it.

jvissers commented 1 year ago

Gentle reminder/question: any projection on when a new version of CQEngine will be cut that fixes this issue?

npgall commented 1 year ago

I am working on CQEngine today, and hopefully will get some more time to cut a release over the holidays.

I have merged your pull request. Thank you very much! It will be included in the next release.

I will keep this issue open though until I have actually made that release.

jvissers commented 1 year ago

Thanks a lot! 🎄

jvissers commented 1 year ago

@npgall is there something I can help you with, to get a new release cut?

jvissers commented 1 year ago

@npgall to give a bit of background. Because of this change in Hibernate https://github.com/hibernate/hibernate-orm/discussions/4975 - people that use Hibernate 6.0.1 and up cannot use cqengine. The change I made and that you merged is super simple, it would really mean a lot if a new release could be cut.

Thanks.

akarnok commented 1 year ago

@npgall When do you plan to release the new version of CQEngine?

npgall commented 1 year ago

Sorry again for the delay on this. I had a new baby, which has reduced my free time! But I should have some time this week and next to work on this.

In the meantime, you should be able to work around this - or any situation where CQEngine's own dependencies conflict with other dependencies needed by the application - by using the CQEngine "shaded" jar instead of the regular jar.

The shaded jar bundles the CQEngine classes and all of CQEngine's own dependencies into a single jar. The classes from CQEngine's dependencies are then relocated to a different Java package name which is prefixed with com.googlecode.cqengine.lib.

This will allow CQEngine to use its own version of Antlr while the application uses a different version.

Something like this in your pom.xml should work:

<dependency>
    <!-- Add a dependency on CQEngine's shaded jar instead of regular jar, and exclude all of CQEngine's transitive dependencies -->
    <groupId>com.googlecode.cqengine</groupId>
    <artifactId>cqengine</artifactId>
    <version>x.x.x</version>
    <classifier>all</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Let me know if that works, or if you have any problems with it.

jvissers commented 1 year ago

First of all: congrats on the new arrival! Hope all is well and you and your family can enjoy this time.

Second: Thanks for informing us about this possible work-around. I'll try it out as soon as possible and let you know when I get stuck.

jvissers commented 1 year ago

@npgall, informing you that the suggested workaround of using shaded version of cqengine indeed works (obviously at the cost of a bigger distribution).

npgall commented 1 year ago

Thanks for the update Jan. Hoping to make a new release soon.