reactor / BlockHound

Java agent to detect blocking calls from non-blocking threads.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error using java 17 & infinispan starter

rgarciapariente opened this issue · comments

When try to use blockhound in a project with infinispan starter I see the next error (note that I currently use AllowRedefinitionToAddDeleteMethods parameter) :

[DEBUG] Forking command line: cmd.exe /X /C "C:\Users\n129586\.jdks\temurin-17.0.4\bin\java -XX:+AllowRedefinitionToAddDeleteMethods -jar C:\Users\n129586\AppData\Local\Temp\surefire3245824828843306227\surefirebooter9693546624297279167.jar C:\Users\n129586\AppData\Local\Temp\surefire3245824828843306227 2023-05-11T11-18-52_492-jvmRun1 surefire4989834894027299333tmp surefire_07784125044571732553tmp"
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.393 s
[INFO] Finished at: 2023-05-11T11:18:55+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project demo: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Users\n129586\workspace\demo\target\surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] There was an error in the forked process
[ERROR] java.util.ServiceConfigurationError: org.junit.platform.launcher.TestExecutionListener: Provider reactor.blockhound.junit.platform.BlockHoundTestExecutionListener could not be instantiated
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR] java.util.ServiceConfigurationError: org.junit.platform.launcher.TestExecutionListener: Provider reactor.blockhound.junit.platform.BlockHoundTestExecutionListener could not be instantiated
[ERROR]         at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:656)
[ERROR]         at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282)
[ERROR]         at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR]         at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183)
[ERROR]         at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011)
[ERROR]         at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857)
[ERROR]         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:370)
[ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:351)
[ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:215)
[ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:171)
[ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:163)
[ERROR]         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR]         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR]         at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR]         at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR]         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:294)
[ERROR]         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR]         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR]         at org.apache.maven.cli.MavenCli.execute(MavenCli.java:960)
[ERROR]         at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:293)
[ERROR]         at org.apache.maven.cli.MavenCli.main(MavenCli.java:196)
[ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[ERROR]         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]         at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
[ERROR]

Steps to Reproduce

I have an executable example https://github.com/rgarciapariente/blockhound-infinispan-error

If I remove infinispan starter dependency then it works ok

Your Environment

  • Reactor version(s) used: 3.5.5
  • Other relevant libraries versions (eg. netty, ...): SB 3.0.6
  • JVM version (java -version):
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: C:\Users\n129586\Aplicaciones\apache-maven-3.8.6
Java version: 17.0.4, vendor: Eclipse Adoptium, runtime: C:\Users\n129586\.jdks\temurin-17.0.4
Default locale: es_ES, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
  • OS and version (eg uname -a): Windows

I will take a look, thanks for having provided the reproducer project.

Can you try to add this dependency in your pom.xml, and tell me if this resolves the issue ?

	<dependency>
		<groupId>org.apache.geronimo.specs</groupId>
		<artifactId>geronimo-jta_1.1_spec</artifactId>
		<version>1.1.1</version>
	</dependency>

if yes, then this issue was a tricky one: actually, infinispan is providing some custom BlockHoundIntegration plugins which are marking the infinispan CacheImpl.size() method as blocking. However, the CacheImpl class actually imports some types from javax.transaction package, but you don't seem to have any jar from your classpath exporting such package (and JTA API is not provided anymore since JAVA11+).

So, BlockHound is then unable to retransform the CacheImp (because it does not find javax.transaction from the classpath).

you may also need to have a look at spring-projects/spring-boot#32896, which may be related.
let me know.

PS: I will see if I can improve BlockHound in order to log a WARNING message in case a class can't be retransformed because of some missing dependencies.

Thank you very much for your help. With the dependency you mention it works perfectly.

cool,

I'm closing this issue.