my2iu / Jinq

LINQ-style queries for Java 8
Other
659 stars 71 forks source link

jdk11 support #97

Closed georgemoralis closed 3 years ago

georgemoralis commented 3 years ago

Are there any plans to support jdk11+ ?

my2iu commented 3 years ago

I’ve been told that Jinq works fine on jdk11+. I haven’t done any extensive testing myself on newer jdks or with modules though.

georgemoralis commented 3 years ago

getting the following error with jdk15

gr/codebb/protoerp/settings/SettingsHelper.java:[62,20] org.jinq.orm.stream.JinqStream.org.jinq.orm.stream.JinqStream.Where in package org.jinq.orm.stream is not accessible (package org.jinq.orm.stream is declared in the unnamed module, but module codebb.protoerp does not read it)

my2iu commented 3 years ago

What is your modules setup? And what is SettingsHelper doing with Jinq? Is it just using Jinq internally or is it exposing some of Jinq’s classes externally?

georgemoralis commented 3 years ago

my pom.xml has

org.jinq jinq-jpa 1.8.31

my module class file has

requires jinq.jpa;

SettingsHelper is some help functions to update a table For example this is how it is done for one function (works fine under java 8)

public static void updateStringSetting(String settingName, String settingValue) { GenericDao gdaoi1 = new GenericDao(SettingsEntity.class, MainApp.getEmf()); JinqJPAStreamProvider streams = new JinqJPAStreamProvider(MainApp.getEmf()); EntityManager em = MainApp.getEmf().createEntityManager(); Optional result = streams .streamAll(em, SettingsEntity.class) .where(c -> c.getSettingName().equals(settingName)) .findFirst(); em.close();

    if (result.isPresent()) {
        SettingsEntity tmp3 = (SettingsEntity) result.get();
        tmp3.setSettingValue(settingValue);
        gdaoi1.updateEntity(tmp3);
    }

}
my2iu commented 3 years ago

JinqStream.Where is actually defined in org.jinq.api. Is it possible to reference that jar directly somehow in your module setup?

georgemoralis commented 3 years ago

hmm it appears to compile if i add

requires api;

in module-info.java but i guess that is not a good name (can easily conflict)

my2iu commented 3 years ago

I was hoping to hold off on adding modularizing the codebase until the next JDK LTS release because it might break the old JDK8 support, and a bunch of extra workarounds might be needed. I might be able to just rename things inside Maven though.

Let me think about it for a bit.

georgemoralis commented 3 years ago

i am writting an open src ERP using jinq btw.

It is still in early stages but you can check it

https://github.com/codebbgr/protoERP

my2iu commented 3 years ago

I looked at enabling modules in Jinq, and it works, but I'm not sure I'm happy with the result, so I'm going to leave full module support for the future. Instead, I'll just provide automatic module names to the .jars so that there will be no module name collisions.

The module names you will need will eventually be org.jinq.api and org.jinq.jpa.

I don't have easy access to my build machine at the moment, so I'll need to hold off making an actual release with these changes until later on, unless it's really urgent for you.

georgemoralis commented 3 years ago

it is not that urgent , atm i don't have collisions so take your time ;)

my2iu commented 3 years ago

Ok, I've released version 1.8.32 to Maven. It provides the automatic module names org.jinq.api instead of api and org.jinq.jpa instead of jinq.jpa