[hibernate-dev] WildFly tests with ByteBuddy enhancement are failing
Guillaume Smet
guillaume.smet at gmail.com
Tue Mar 26 12:50:23 EDT 2019
I would try changing the start of EnhancerImpl#enhance() to:
=======
public byte[] enhance(String className, byte[] originalBytes) throws
EnhancementException {
//Classpool#describe does not accept '/' in the description name as
it expects a class name. See HHH-12545
final String safeClassName = className.replace( '/', '.' );
try {
final Resolution typeResolution = typePool.describe(
safeClassName );
if ( !typeResolution.isResolved() ) {
return null;
}
final TypeDescription typeDescription =
typeResolution.resolve();
=======
i.e. testing the resolution of the type.
That might fix it.
--
Guillaume
On Tue, Mar 26, 2019 at 5:39 PM Scott Marlow <smarlow at redhat.com> wrote:
> Thinking more about this, I don't think that ByteBuddy should be able to
> do a classloader.getResource() on the class that is being defined
> (SLSBPersistenceContexts$$$view5.class). It might be correct for the
> getResource call to return null, until after the class is completely
> defined.
>
> Would it make sense for the above condition (cl.getResource() returning
> null) be detected differently in the callstack [1] and just fall through
> + return to the caller?
>
> Scott
>
> [1] https://gist.github.com/scottmarlow/0e74cd16d7229812261b7c14e452b3cd
>
> On 3/26/19 9:53 AM, Scott Marlow wrote:
> > Hi Tomek,
> >
> > I think the pending question now is why ByteBuddy is getting a null
> > result from the
> >
> classLoader.getResourceAsStream("org/jboss/as/test/integration/jpa/basic/SLSBPersistenceContexts$$$view5.class")
>
> > call.
> >
> > We have also seen failures for
> > org.jboss.as.ejb3.SerializationProxyHackImplementation as well, which is
> > also generated by the EJB container (see exception call stack in
> > https://issues.jboss.org/browse/WFLY-11891).
> >
> > I wonder if this could be an ordering bug where classes generated via
> > JBoss ClassFileWriter are added to the classloader list of classes,
> > before the actual bytecode is added.
> >
> > Scott
> >
> > On 3/26/19 9:17 AM, Tomasz Adamski wrote:
> >> Hi Scott,
> >>
> >> Added to my TODO. WIll try to look at it this week.
> >>
> >> Regards,
> >> Tomek
> >>
> >> On Mon, Mar 25, 2019 at 5:14 PM Scott Marlow <smarlow at redhat.com
> >> <mailto:smarlow at redhat.com>> wrote:
> >>
> >> Adding Tomek + Cheng, as they have been working on the WildFly EJB
> >> layer
> >> recently, which seems to use
> >> https://github.com/jbossas/jboss-classfilewriter for generating
> >> the EJB
> >> stub classes like
> >>
> >>
> org/jboss/as/test/integration/jpa/basic/SLSBPersistenceContexts$$$view5.class.
>
> >>
> >>
> >> Perhaps Tomek or Cheng, can answer whether WildFly (EJB layer) or
> >> ByteBuddy should change to handle dynamically generated classes
> >> differently.
> >>
> >> In other words, should ByteBuddy respond differently to
> >>
> >>
> classLoader.getResourceAsStream("org/jboss/as/test/integration/jpa/basic/SLSBPersistenceContexts$$$view5.class")
>
> >>
> >>
> >> returning null or should the jboss-classfilewriter project somehow
> >> avoid
> >> this bug.
> >>
> >> Scott
> >>
> >> On 3/22/19 2:54 AM, Gail Badner wrote:
> >> > Scott added bytecode enhancement to some WildFly tests for
> >> WFLY-11891 [1],
> >> > which are failing.
> >> >
> >> > Here is Scott's PR with the updated tests: [2]
> >> >
> >> > When I stepped into
> >> >
> >>
> >>
> org.jboss.as.test.integration.jpa.basic.multiplepersistenceunittest.MultiplePuTestCase,
>
> >>
> >> > I can see that they are failing in ByteBuddy code.
> >> >
> >> > I see that:
> >> >
> >> > - enhancement of
> >> >
> >> org.jboss.as.test.integration.jpa.basic.SLSBPersistenceContexts gets
> >> > skipped several times in a row;
> >> > - enhancement of some other classes get skipped;
> >> > - before trying to enhance
> >> >
> >>
> org.jboss.as.test.integration.jpa.basic.SLSBPersistenceContexts$$$view5,
> >> an
> >> > exception is thrown.
> >> >
> >> > Unfortunately, I'm having trouble getting a good stacktrace to
> >> show what
> >> > happens in ByteBuddy code.
> >> >
> >> > Here is what I'm seeing:
> >> >
> >> >
> >>
> >>
> net.bytebuddy.pool.TypePool$Default.doDescribe("org.jboss.as.test.integration.jpa.basic.SLSBPersistenceContexts$$$view5")
>
> >>
> >> > /* class name differs from run to run */
> >> >
> >> >
> >> > calls
> >> net.bytebuddy.dynamic.ClassFileLocator$ForClassLoader.locate( "
> >> >
> >>
> >>
> org.jboss.as.test.integration.jpa.basic.SLSBPersistenceContexts$$$view5")
> >> >
> >> > calls
> >> net.bytebuddy.dynamic.ClassFileLocator.ForClassLoader.locate(
> >> > classLoader,
> >>
> >>
> "org.jboss.as.test.integration.jpa.basic.SLSBPersistenceContexts$$$view5"
> >> > )
> >> >
> >> > calls
> >> >
> >>
> >>
> classLoader.getResourceAsStream("org/jboss/as/test/integration/jpa/basic/SLSBPersistenceContexts$$$view5.class"),
>
> >>
> >> > which returns null;
> >> >
> >> > (I don't actually see a class file with this name)
> >> >
> >> >
> >> > returns new TypePool.Resolution.Illegal(
> >> >
> >> >
> >>
> >>
> "org/jboss/as/test/integration/jpa/basic/SLSBPersistenceContexts$$$view5.class"
>
> >>
> >> >
> >> > )
> >> >
> >> > returns TypePool.Resolution.Illegal
> >> >
> >> >
> >> > Ultimately, TypePool.Resolution.Illegal#resolve( ) throws
> >> > IllegalStateException, because the type description cannot be
> >> resolved.
> >> >
> >> > I'm not sure if the problem is in WildFly, Hibernate, or
> >> ByteBuddy.
> >> >
> >> > To build WildFly:
> >> > ./build.sh clean install -DskipTests=true
> >> >
> >> > To run the test:
> >> > cd testsuite/integration/basic
> >> > mvn install
> >> >
> >>
> >>
> -Dtest=org/jboss/as/test/integration/jpa/basic/multiplepersistenceunittest/MultiplePuTestCase
>
> >>
> >> >
> >> > Help would be very much appreciated.
> >> >
> >> > Thanks,
> >> > Gail
> >> >
> >> > [1] https://issues.jboss.org/browse/WFLY-11891
> >> > [2] https://github.com/wildfly/wildfly/pull/12180
> >> > _______________________________________________
> >> > hibernate-dev mailing list
> >> > hibernate-dev at lists.jboss.org
> >> <mailto:hibernate-dev at lists.jboss.org>
> >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >> >
> >>
> >>
> >>
> >> --
> >> Regards,
> >> Tomek
> _______________________________________________
> 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