Actually I found the problem. Its actually not related to the manifest
change. The problem was a mismatch in the bundle group/module names for
JPA since we switched to the (now published) standard JPA API jar. Fixing
that fixed the failures. Sorry for the noise.
On Fri, Dec 29, 2017 at 10:35 AM Brett Meyer <brett(a)hibernate.org> wrote:
Hey Steve, just to clarify, did this start failing directly after
the
manifest change? Or are you saying it could be from other
dependency-related updates?
On 12/29/17 10:58 AM, Steve Ebersole wrote:
Maybe this is similar to the problems we've had with the WildFly
hibernate-orm-moudles stuff - versions of karaf/aries/etc not yet
supporting EE8 techs (JPA 2.2, CDI 2.0, etc)?
On Thu, Dec 28, 2017 at 11:56 AM Steve Ebersole <steve(a)hibernate.org>
wrote:
> Brett, after making these changes the osgi tests now fail[1] with a RMI
> connection error which I cannot decipher. Could you see if you can
> understand the problem?
>
> Thanks
>
> [1]
>
http://ci.hibernate.org/job/hibernate-orm-master-h2-main/942/testReport/j...
>
>
>
> On Thu, Dec 28, 2017 at 9:06 AM Steve Ebersole <steve(a)hibernate.org>
> wrote:
>
>> After tweaking this, here is what I have...
>>
>> Manifest-Version: 1.0
>> Created-By: 1.8.0_121 (Oracle Corporation)
>> Main-Class: org.hibernate.Version
>>
>> Specification-Title: hibernate-core
>> Specification-Version: 5.3
>> Specification-Vendor:
Hibernate.org
>>
>> Implementation-Title: hibernate-core
>> Implementation-Version: 5.3.0.SNAPSHOT
>> Implementation-Vendor-Id: org.hibernate
>> Implementation-Vendor:
Hibernate.org
>> Implementation-Url:
http://hibernate.org
>>
>> Automatic-Module-Name: org.hibernate.orm.core
>>
>> Bundle-ManifestVersion: 2
>> Require-Capability:
osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
>> Tool: Bnd-3.4.0.201707252008
>>
>> Bundle-SymbolicName: org.hibernate.orm.core
>> Bundle-Version: 5.3.0.SNAPSHOT
>> Bundle-Name: hibernate-core
>> Bundle-Description: A module of the Hibernate O/RM project
>> Bundle-Vendor:
Hibernate.org
>> Bundle-DocURL:
http://www.hibernate.org/orm/5.3
>> Bnd-LastModified: 1513615321000
>>
>> Import-Package: ...
>> Export-Package: ...
>>
>>
>> Which looks great to me...
>>
>> On Wed, Dec 27, 2017 at 3:39 PM Steve Ebersole <steve(a)hibernate.org>
>> wrote:
>>
>>> I had intended this for 5.3 which hasn't even gone Beta yet (we wont
>>> have an Alpha).
>>>
>>> On Wed, Dec 27, 2017 at 3:38 PM Brett Meyer <brett(a)hibernate.org>
>>> wrote:
>>>
>>>> +1 from me on making them consistent. In practice, Bundle-SymbolicName
>>>> isn't used for much, other than a guaranteed unique identifier. One
of
>>>> the Karaf guys pointed out that Bundle-SymbolicName is used to link a
>>>> fragment bundle to its host bundle, but we've been able to avoid
>>>> fragments like the plague on purpose.
>>>>
>>>> In practice, most users should be pulling in and interacting with our
>>>> bundles purely through Maven artifacts or our features.xml, so a change
>>>> would largely be unnoticed.
>>>>
>>>> We still might consider holding off doing that until at least a minor
>>>> version change, since there is a potential issue for any tooling that
>>>> might be relying on that (logging/auditing, etc.)...
>>>>
>>>>
>>>> On 12/23/17 11:38 PM, Steve Ebersole wrote:
>>>> > Another thing I was noticing was an annoying minor difference
>>>> between the
>>>> > OSGi bundle name and the Java 9 module name:
>>>> >
>>>> > Automatic-Module-Name: org.hibernate.orm.core
>>>> > Bundle-SymbolicName: org.hibernate.core
>>>> >
>>>> > Does it make sense to adjust the OSGi bundle name to follow the
>>>> module
>>>> > naming?
>>>> >
>>>> > On Sat, Dec 23, 2017 at 8:47 AM Steve Ebersole
<steve(a)hibernate.org>
>>>> wrote:
>>>> >
>>>> >> I already did a PR for the `Automatic-Module-Name` yesterday
and
>>>> added you
>>>> >> as a reviewer. when you get a chance...
>>>> >>
>>>> >>
>>>> >>
>>>> >> On Sat, Dec 23, 2017 at 8:36 AM Gunnar Morling <
>>>> gunnar(a)hibernate.org>
>>>> >> wrote:
>>>> >>
>>>> >>> 2017-12-22 23:07 GMT+01:00 Steve Ebersole
<steve(a)hibernate.org>:
>>>> >>>
>>>> >>>> I created a Jira to track this:
>>>> >>>>
https://hibernate.atlassian.net/browse/HHH-12188
>>>> >>>>
>>>> >>>> On Fri, Dec 22, 2017 at 5:33 AM Steve Ebersole <
>>>> steve(a)hibernate.org>
>>>> >>>> wrote:
>>>> >>>>
>>>> >>>>> Thanks for investigating this Gunnar.
>>>> >>>>>
>>>> >>>>> Some thoughts inline...
>>>> >>>>>
>>>> >>>>> On Wed, Dec 20, 2017 at 3:54 PM Gunnar Morling <
>>>> gunnar(a)hibernate.org>
>>>> >>>>> wrote:
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>> * JDK 9 comes with an incomplete JTA module
(java.transaction),
>>>> so a
>>>> >>>>>> complete one must be provided via
--upgrade-module-path (I'm
>>>> using the
>>>> >>>>>> 2.0.0.Alpha1 version Tomaz Cerar has created for
that purpose)
>>>> >>>>>>
>>>> >>>>> Do you know if there is a plan to fix this in Java
9? Seems
>>>> bizarre
>>>> >>>>> that Java 9 expects all kinds of strict modularity
from
>>>> libraries and
>>>> >>>>> applications when the JDK itself can't follow
that..
>>>> >>>>>
>>>> >>> The "java.transaction" module of the JDK is marked
with
>>>> >>> @Deprecated(forRemoval=true) as of Java 9, but I don't
know when
>>>> the
>>>> >>> removal will happen. There's JEP 320 for this (
>>>> >>>
http://openjdk.java.net/jeps/320), which also describes why
the
>>>> module
>>>> >>> exists in its current form. It's not scheduled for Java
10
>>>> currently, and
>>>> >>> given the latter is in rampdown already, I wouldn't
expect this
>>>> removal to
>>>> >>> happen before Java 11.
>>>> >>>
>>>> >>>
>>>> >>>>>> * hibernate-jpa-2.1-api-1.0.0.Final.jar
can't be used as an
>>>> automatic
>>>> >>>>>> module, as the automatic naming algorithm
stumples upon the
>>>> numbers
>>>> >>>>>> (2.1)
>>>> >>>>>> within the module name it derives; I'm
therefore using my
>>>> ModiTect
>>>> >>>>>> tooling (
>>>> >>>>>>
https://github.com/moditect/moditect/) to
convert the JPA API
>>>> JAR
>>>> >>>>>> into an
>>>> >>>>>> explicit module on the fly
>>>> >>>>>>
>>>> >>>>> We actually no longer use that artifact as a
dependency. Since
>>>> JPA
>>>> >>>>> 2.2, the EG publishes a "blessed" API jar
which is what we use
>>>> as a
>>>> >>>>> dependency.
>>>> >>>>>
>>>> >>> Ah, yes, very nice. That one already defines an explicit
module
>>>> name
>>>> >>> ("java.persistence") via the Automatic-Module-Name
manifest entry.
>>>> >>>
>>>> >>>>>> * When using ByteBuddy as the byte code
provider, a reads
>>>> relationship
>>>> >>>>>> must
>>>> >>>>>> be added from the user's module towards
hibernate.core
>>>> ("requires
>>>> >>>>>> hibernate.core"). This is due to the usage
of
>>>> >>>>>> org.hibernate.proxy.ProxyConfiguration within
the generated
>>>> proxy
>>>> >>>>>> classes.
>>>> >>>>>> Ideally no dependence to the JPA provider should
be needed when
>>>> solely
>>>> >>>>>> working with the JPA API (as this demo does),
but I'm not sure
>>>> whether
>>>> >>>>>> this
>>>> >>>>>> can be avoided when using proxies (or could we
construct
>>>> proxies in a
>>>> >>>>>> way
>>>> >>>>>> not requiring this dependence?).
>>>> >>>>>>
>>>> >>>>> I'm not sure what a decent solution would be
here. Ultimately
>>>> the
>>>> >>>>> runtime needs to be able to communicate with the
generated
>>>> proxies - how
>>>> >>>>> else would you suggest this happen?
>>>> >>>>>
>>>> >>> Not sure either. Maybe we could generate a dedicated
interface
>>>> into the
>>>> >>> user's module and then inject a generated implementation
-- living
>>>> within
>>>> >>> the ORM module -- of that interface into the entities. Worth
some
>>>> tinkering
>>>> >>> I reckon.
>>>> >>>
>>>> >>>>> * When using ByteBuddy as the byte code provider, I
still needed
>>>> to have
>>>> >>>>>> Javassist around, as it's used in
ClassFileArchiveEntryHandler.
>>>> I
>>>> >>>>>> understand that eventually this should be using
Jandex, but I'm
>>>> >>>>>> wondering
>>>> >>>>>> whether we could (temporarily) change it to use
ASM instead of
>>>> >>>>>> Javassist
>>>> >>>>>> (at least when using ByteBuddy as byte code
provider, which is
>>>> based on
>>>> >>>>>> ASM), so people don't need to have Javassist
*and* ByteBuddy
>>>> when
>>>> >>>>>> using the
>>>> >>>>>> latter as byte code provider? This seems
desirable esp. once we
>>>> move to
>>>> >>>>>> ByteBuddy by default.
>>>> >>>>>>
>>>> >>>>> Yes, Sanne brought this up in Paris and it is
something I will
>>>> look at
>>>> >>>>> prior to a 5.3.0.Final
>>>> >>>>>
>>>> >>> Excellent.
>>>> >>>
>>>> >>>>> * Multiple methods in ReflectHelper call
setAccessible() without
>>>> >>>>>> checking
>>>> >>>>>> whether the method/field/constructor already is
accessible. If
>>>> we
>>>> >>>>>> changed
>>>> >>>>>> that to only call setAccessible() if actually
needed, people
>>>> would
>>>> >>>>>> have to
>>>> >>>>>> be a little bit less permissive in their module
descriptor. It'd
>>>> >>>>>> suffice
>>>> >>>>>> for them to declare "exports
com.example.entities to
>>>> hibernate.core"
>>>> >>>>>> instead of "opens com.example.entities to
hibernate.core",
>>>> unless they
>>>> >>>>>> mandate (private) field access for their
entities.
>>>> >>>>>>
>>>> >>>>> Can you open a Jira for that?
>>>> >>>>>
>>>> >>> Done:
https://hibernate.atlassian.net/browse/HHH-12189.
>>>> >>>
>>>> >>>
>>>> >>>>>> The demo is very simple (insert and load of an
entity with a
>>>> lazy
>>>> >>>>>> association). If there's anything else
you'd like to try out
>>>> when
>>>> >>>>>> using ORM
>>>> >>>>>> as JPMS modules, let me know or just fork the
demo and try it
>>>> out
>>>> >>>>>> yourself
>>>> >>>>>>
>>>> >>>>> IIUC for jars targeting both Java 8 and Java 9 we
cannot include
>>>> a
>>>> >>>>> module-info file. But we need to set the module
names - you
>>>> mentioned
>>>> >>>>> there was a "hinting" process. From what
I could glean from
>>>> searching
>>>> >>>>> (which was oddly not many hits), this is achieved by
adding a
>>>> >>>>> `Automatic-Module-Name` entry in the JAR's
MANIFEST.MF. Correct?
>>>> >>>>>
>>>> >>> Yes, exactly that's the mechanism. Jason Greene is
working on a
>>>> document
>>>> >>> with recommendations around naming patterns, I hope
it'll be
>>>> published soon.
>>>> >>>
>>>> >>>
>>>> >>>>> Also, IIRC we agreed with `org.hibernate.orm` as the
base for
>>>> all ORM
>>>> >>>>> module names, so we'd have:
>>>> >>>>>
>>>> >>>>> - org.hibernate.orm.c3p0
>>>> >>>>> - org.hibernate.orm.core
>>>> >>>>> - ...
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> > _______________________________________________
>>>> > 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
>>>
>>>