[hibernate-dev] Trying Hibernate 5.0.0.Beta1

Gunnar Morling gunnar at hibernate.org
Wed Apr 1 05:32:02 EDT 2015


> 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.

Looked at this a bit closer. Turns out, AnimalSniffer *will* detect this
issue if it actually is run. The problem is that AS apparently is not
executed by default anymore, due to the recent change to how AS is used [1].

Prior to that change, running AS was done automatically after the compileJava
task and would have reported that usage of KeySetView:

    Undefined reference:
java/util/concurrent/ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
in
[...]/hibernate-orm/hibernate-core/target/classes/main/org/hibernate/internal/SessionFactoryImpl.class

Unfortunately my Gradle Foo is rather limited, so I'm not sure how to
re-establish that behaviour with the new AS plug-in.

--Gunnar

[1]
https://github.com/hibernate/hibernate-orm/commit/5f6d1d24f7945eb8a5acdb69d9595004ec4e462f




2015-04-01 9:39 GMT+02:00 Gunnar Morling <gunnar at hibernate.org>:

> 2015-04-01 2:21 GMT+02:00 Steve Ebersole <steve at hibernate.org>:
>
>> 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 at 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 at 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/%3C07c401d06aba%240b477c80%2421d67580%24%40thetaphi.de%3E
>> >>
>> >> 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 at 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 at 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 at 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 at 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 at gmail.com>:
>> >> >>>>
>> >> >>>>> petar at 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 at 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 at petar-ThinkPad-X1-Carbon:~$
>> >> >>>>>
>> >> >>>>>
>> >> >>>>> 2015-04-01 2:21 GMT+03:00 Steve Ebersole <steve at 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 at 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 at 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 at 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 at 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-migration-guide.md
>> >> >>>>>>>>>>  As far are the new bootstrapping apis, see
>> >> >>>>>>>>>>
>> >>
>> http://docs.jboss.org/hibernate/orm/5.0/topical/html/bootstrap/NativeBootstrapping.html
>> >> >>>>>>>>>> and
>> >> >>>>>>>>>>
>> >>
>> http://docs.jboss.org/hibernate/orm/5.0/topical/html/bootstrap/LegacyBootstrapping.html
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> On Tue, Mar 31, 2015 at 5:07 PM, Petar Tahchiev <
>> >> >>>>>>>>>> paranoiabla at 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 at 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 at lists.jboss.org
>> >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> >>
>> >
>> >
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>
>


More information about the hibernate-dev mailing list