Just to clarify... I *think* that as long as we run the build with
Java 8
and set the bootclasspath to 6 or 7 we should be fine.
Yes, setting the boot classpath to 6 (or 7) makes sure you only use classes
present in that JDK (be it explicitly or implicitly as in the
ConcurrentHashMap case), because it's that class library which will be used
for compilation then. It is cumbersome to use though as you need to specify
the location of a 6 or 7 JDK which makes the build less easily portable
between machines.
Currently, AnimalSniffer is in place to prevent this very category of error
and I'm wondering why it didn't detect the "usage" of KeySetView. It
really
should have detected it, assuming it analyses the byte code of classes. But
this makes me wonder now whether it only analyses the source code actually.
Then it wouldn't be usable to prevent this sort of issue.
Coding against the ConcurrentMap interface is the best way to avoid the
issue. But of course there is no guarantee that it happens again, unless
e.g. having a build on CI which uses 6 or 7 on its boot classpath.
On Tue, Mar 31, 2015 at 7:13 PM, Steve Ebersole
<steve(a)hibernate.org>
wrote:
> Well the idea is to run the Gradle process with Java 8 (the build itself
> is a Java process too don't forget). We pass in the older JDK
specifically
> to be able to set the bootclasspath for compilation and the executable
for
> running tests. That's the theory.
>
> Interestingly I developed a simplified project to test these theories:
>
https://github.com/sebersole/gradle-mixed-jdk And of course this all
> works there. As you'd expect right?
>
> I think the JAXB thing comes into play here as well. Gradle does not
have
> any XJC support built in, so we have to make use of its Ant support to
run
> the XJC Ant tasks for JAXB model generation. The problem there is that,
> afaik, there is no way to tell Gradle's AntBuilder to use a JDK other
than
> the one that launched Gradle. I think this is why we see a JAXB model
> defined for Java 7, rather than Java 6, because we essentially run XJC
with
> Java 8.
>
> Anyway, this certainly makes the build more complex and we definitely
have
> to think through all these scenarios. In fact after Beta1, one of my
todos
> is to build up the build "from scratch" using that gradle-mixed-jdk
project
> as a basis.
>
> In general the plan though is to run all the tests (other than
> hibernate-java8, obviously) with the "baseline JDK, whether that be Java
6
> or 7.
>
> On Tue, Mar 31, 2015 at 6:59 PM, Sanne Grinovero <sanne(a)hibernate.org>
> wrote:
>
>> There are many similar issues discussed on the Lucene developer's
>> mailing list, it's an interesting read:
>> -
>>
http://mail-archives.apache.org/mod_mbox/lucene-dev/201503.mbox/%3C07c401...
>>
>> I see no alternative than to have those test jobs actually exercising
>> ORM with JDK6, or maybe even compile it all with JDK6 except the Java8
>> additional module to be compiled with JDK8 ?
>>
>>
>>
>> On 1 April 2015 at 00:36, Steve Ebersole <steve(a)hibernate.org> wrote:
>> > Ahh, seems this may be an option to work around it:
>> >
>> > <quote>
>> > Using the general *Map* interface in place of the concrete
>> > *ConcurrentHashMap* type here side-steps the coupling to the Java 8
>> return
>> > type and will allow this code to be compiled with Java 8 and run on
>> Java 7.
>> > </quote>
>> >
>> > I had missed that part.
>> >
>> >
>> > On Tue, Mar 31, 2015 at 6:34 PM, Steve Ebersole
<steve(a)hibernate.org>
>> wrote:
>> >
>> >> When I say "internal" here, I mean internal to java classes.
>> >>
>> >> On Tue, Mar 31, 2015 at 6:30 PM, Steve Ebersole
<steve(a)hibernate.org
>
>> >> wrote:
>> >>
>> >>> Nope. It just effects any code compiled with Java 8 even though
the
>> >>> change is internal. The problem is the generated bytecode
>> incorporates
>> >>> this change. Like I said, this should be compiled with 1.6
>> compatibility,
>> >>> but that is apparently not working atm. I am having a struggle
>> getting a
>> >>> mixed JDK build working "just right".
>> >>>
>> >>> On Tue, Mar 31, 2015 at 6:28 PM, Petar Tahchiev <
>> paranoiabla(a)gmail.com>
>> >>> wrote:
>> >>>
>> >>>> According to this:
>> >>>>
>> >>>>
https://gist.github.com/AlainODea/1375759b8720a3f9f094
>> >>>>
>> >>>> Notably the Java 1.7 *ConcurrentHashMap#keySet()* returns a
Set<K>
>> while
>> >>>> the 1.8*ConcurrentHashMap#keySet()* returns a
>> >>>> ConcurrentHashMap.KeySetView<K,V>`.
>> >>>>
>> >>>> I think you're using some Java8 API.
>> >>>>
>> >>>>
>> >>>> 2015-04-01 2:25 GMT+03:00 Petar Tahchiev
<paranoiabla(a)gmail.com>:
>> >>>>
>> >>>>> petar@petar-ThinkPad-X1-Carbon:~$ java -version
>> >>>>> java version "1.7.0_71"
>> >>>>> Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
>> >>>>> Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed
mode)
>> >>>>> petar@petar-ThinkPad-X1-Carbon:~$ uname -a
>> >>>>> Linux petar-ThinkPad-X1-Carbon 3.16.0-33-generic #44-Ubuntu
SMP
Thu
>> Mar
>> >>>>> 12 12:19:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
>> >>>>> petar@petar-ThinkPad-X1-Carbon:~$
>> >>>>>
>> >>>>>
>> >>>>> 2015-04-01 2:21 GMT+03:00 Steve Ebersole
<steve(a)hibernate.org>:
>> >>>>>
>> >>>>>> What JRE are you trying to use? This error:
>> >>>>>>
>> >>>>>> java.lang.NoSuchMethodError: java.util.concurrent.
>> >>>>>> ConcurrentHashMap.keySet()Ljava/util/concurrent/
>> >>>>>> ConcurrentHashMap$KeySetView;
>> >>>>>>
>> >>>>>> is indicative of an issue in cross-jre support due to a
change
>> >>>>>> internal to java classes.
>> >>>>>>
>> >>>>>>
>> >>>>>> On Tue, Mar 31, 2015 at 6:03 PM, Petar Tahchiev <
>> paranoiabla(a)gmail.com
>> >>>>>> > wrote:
>> >>>>>>
>> >>>>>>> Thanks Steve,
>> >>>>>>>
>> >>>>>>> I managed to migrate my configuration to the new
>> >>>>>>> MetamodelImplementor. Now when I run the scema
export I get a
lot
>> of these
>> >>>>>>> warning:
>> >>>>>>>
>> >>>>>>> INFO : HHH000400: Using dialect:
>> org.hibernate.dialect.MySQL5Dialect
>> >>>>>>> WARN : JDBC Driver reports it stores quoted
identifiers in both
>> mixed
>> >>>>>>> and upper case
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>> com.xxx.platform.core.model.cms.AbstractPageModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
com.xxx.platform.module.invoice.core.model.InvoicePageModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
com.xxx.platform.core.model.batch.BatchStepExecutionContextModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
com.xxx.platform.core.model.batch.BatchJobExecutionContextModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
>> com.xxx.platform.module.search.core.model.SearchKeywordRedirectModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
com.xxx.platform.module.search.core.model.SearchPageRedirectModel
>> >>>>>>> WARN : HHH000072: Duplicate joins for class:
>> >>>>>>>
com.xxx.platform.module.promotion.core.model.PromotionModel
>> >>>>>>>
>> >>>>>>> and when I run some test I get the following
exception:
>> >>>>>>> java.lang.NoSuchMethodError:
>> >>>>>>>
>>
java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.internal.SessionFactoryImpl.iterateEntityNameResolvers(SessionFactoryImpl.java:733)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.internal.SessionImpl$CoordinatingEntityNameResolver.resolveEntityName(SessionImpl.java:2470)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.internal.SessionImpl.guessEntityName(SessionImpl.java:1992)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1485)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:163)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:85)
>> >>>>>>> at
>> >>>>>>>
org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:882)
>> >>>>>>> at
>> org.hibernate.internal.SessionImpl.merge(SessionImpl.java:864)
>> >>>>>>> at
>> org.hibernate.internal.SessionImpl.merge(SessionImpl.java:869)
>> >>>>>>> at
>> >>>>>>>
>>
org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1196)
>> >>>>>>> at
>> >>>>>>>
>>
org.springframework.batch.item.database.JpaItemWriter.doWrite(JpaItemWriter.java:104)
>> >>>>>>> at
>> >>>>>>>
>>
org.springframework.batch.item.database.JpaItemWriter.write(JpaItemWriter.java:83)
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> 2015-04-01 1:23 GMT+03:00 Steve Ebersole
<steve(a)hibernate.org>:
>> >>>>>>>
>> >>>>>>>> I am told that the bug does not affect the
JBoss->Central sync
>> >>>>>>>> process. So at some point the artifacts should
all be
available
>> in Central
>> >>>>>>>>
>> >>>>>>>> On Tue, Mar 31, 2015 at 5:19 PM, Steve Ebersole
<
>> steve(a)hibernate.org
>> >>>>>>>> > wrote:
>> >>>>>>>>
>> >>>>>>>>> hibernate-core seems to be the only
artifact that is available
>> in
>> >>>>>>>>> JBoss Nexus.
>> >>>>>>>>>
>> >>>>>>>>> On Tue, Mar 31, 2015 at 5:18 PM, Steve
Ebersole <
>> >>>>>>>>> steve(a)hibernate.org> wrote:
>> >>>>>>>>>
>> >>>>>>>>>> So apparently the artifacts / repo
issue is a Nexus bug that
is
>> >>>>>>>>>> effecting the JBoss repo (and therefore
us)...
>> >>>>>>>>>>
http://issues.sonatype.org/browse/NEXUS-7654
>> >>>>>>>>>>
>> >>>>>>>>>> As I pointed out in the announcement, I
am managing the
>> "migration
>> >>>>>>>>>> guide" in source repo while I
develop the Betas. See
>> >>>>>>>>>>
>>
https://github.com/hibernate/hibernate-orm/blob/master/working-5.0-migrat...
>> >>>>>>>>>> As far are the new bootstrapping apis,
see
>> >>>>>>>>>>
>>
http://docs.jboss.org/hibernate/orm/5.0/topical/html/bootstrap/NativeBoot...
>> >>>>>>>>>> and
>> >>>>>>>>>>
>>
http://docs.jboss.org/hibernate/orm/5.0/topical/html/bootstrap/LegacyBoot...
>> >>>>>>>>>>
>> >>>>>>>>>> On Tue, Mar 31, 2015 at 5:07 PM, Petar
Tahchiev <
>> >>>>>>>>>> paranoiabla(a)gmail.com> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>> Hi guys,
>> >>>>>>>>>>>
>> >>>>>>>>>>> I just tried the latest beta and I
cannot compile my
project.
>> >>>>>>>>>>> With the
>> >>>>>>>>>>> latest hibernate 4.3.X I was able
to do this:
>> >>>>>>>>>>> -------
>> >>>>>>>>>>> final
org.hibernate.cfg.Configuration configuration
=
>> >>>>>>>>>>> getHibernateConfiguration();
>> >>>>>>>>>>>
configuration.buildMappings();
>> >>>>>>>>>>> final SchemaUpdate
schemaUpdate = new
>> >>>>>>>>>>> SchemaUpdate(configuration);
>> >>>>>>>>>>> -------
>> >>>>>>>>>>>
>> >>>>>>>>>>> however it seems that the
SchemaUpdate constructor has been
>> >>>>>>>>>>> removed and now
>> >>>>>>>>>>> a new one is added:
>> >>>>>>>>>>> --------
>> >>>>>>>>>>> public
SchemaUpdate(MetadataImplementor metadata) {
>> >>>>>>>>>>> this(
>> >>>>>>>>>>>
metadata.getMetadataBuildingOptions().getServiceRegistry(),
>> >>>>>>>>>>> metadata );
>> >>>>>>>>>>> }
>> >>>>>>>>>>> ---------
>> >>>>>>>>>>>
>> >>>>>>>>>>> Also the
configuration.buildMappings() method has been
>> >>>>>>>>>>> deprecated. Where do
>> >>>>>>>>>>> I get the MetadataImplementor from?
Also is there any
>> changelog I
>> >>>>>>>>>>> can refer
>> >>>>>>>>>>> to?
>> >>>>>>>>>>>
>> >>>>>>>>>>> Thanks.
>> >>>>>>>>>>> --
>> >>>>>>>>>>> Regards, Petar!
>> >>>>>>>>>>> Karlovo, Bulgaria.
>> >>>>>>>>>>> ---
>> >>>>>>>>>>> Public PGP Key at:
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>>
https://keyserver1.pgp.com/vkd/DownloadKey.event?keyid=0x19658550C3110611
>> >>>>>>>>>>> Key Fingerprint: A369 A7EE 61BC
93A3 CDFF 55A5 1965 8550
C311
>> >>>>>>>>>>> 0611
>> >>>>>>>>>>>
_______________________________________________
>> >>>>>>>>>>> hibernate-dev mailing list
>> >>>>>>>>>>> hibernate-dev(a)lists.jboss.org
>> >>>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> --
>> >>>>>>> Regards, Petar!
>> >>>>>>> Karlovo, Bulgaria.
>> >>>>>>> ---
>> >>>>>>> Public PGP Key at:
>> >>>>>>>
>>
https://keyserver1.pgp.com/vkd/DownloadKey.event?keyid=0x19658550C3110611
>> >>>>>>> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF 55A5
1965 8550 C311
>> 0611
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> Regards, Petar!
>> >>>>> Karlovo, Bulgaria.
>> >>>>> ---
>> >>>>> Public PGP Key at:
>> >>>>>
>>
https://keyserver1.pgp.com/vkd/DownloadKey.event?keyid=0x19658550C3110611
>> >>>>> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF 55A5 1965 8550
C311
0611
>> >>>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Regards, Petar!
>> >>>> Karlovo, Bulgaria.
>> >>>> ---
>> >>>> Public PGP Key at:
>> >>>>
>>
https://keyserver1.pgp.com/vkd/DownloadKey.event?keyid=0x19658550C3110611
>> >>>> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF 55A5 1965 8550 C311
0611
>> >>>>
>> >>>
>> >>>
>> >>
>> > _______________________________________________
>> > hibernate-dev mailing list
>> > hibernate-dev(a)lists.jboss.org
>> >
https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>
>
_______________________________________________
hibernate-dev mailing list
hibernate-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev