Comments (5)
it seems that there is a work around: since #297, we can now start the blockhound agent using the jvm option -javaagent
, which seems to work well in jpms. You don't need to call BlockHound.install()
from the code, just start the jvm with the -javaagent:; and blockhound will even be able to locate BlockHoundIntegration plugins declared inside modules (named, un-named, or automatic modules), because ServiceLoader also locates SPIs from modules.
I'm attaching a sample project (see README.MD file), which is using reactor-netty in a jpms environment:
from blockhound.
Side note found while reproducing: for the agent to attach, here is the module-info.java
that I ended up with:
module blockhoundNpe.main {
requires jdk.attach; //required for bytebuddy to attach
requires jdk.unsupported; //required for Unsafe access by log4j
requires reactor.blockhound;
requires spring.boot;
requires spring.boot.autoconfigure;
}
Otherwise, an IllegalStateException: No compatible attachment provider is available
is thrown by bytebuddy.
from blockhound.
I'll need @bsideup's expertise here. It looks like with modules there is either an issue with BlockHoundRuntime
being loaded outside the bootstrap classloader, or some initialization change that leads to out-of-order usage vs loading of blockhound...
In any case, BlockhoundRuntime.STATE.withInitial
block sees null
values for the predicates and the blockingMethodConsumer
.
I tried to give these default values, but that renders Blockhound#testInstrumentation
non-functional 😞
from blockhound.
I met the same issue in open JDK 11. Anyone can support it or fix it? It looks the BlockHound community is inactive now.
0 = {StackTraceElement@3075} "reactor.blockhound.BlockHoundRuntime.lambda$static$0(BlockHoundRuntime.java:62)"
1 = {StackTraceElement@3076} "java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305)"
2 = {StackTraceElement@3077} "java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195)"
3 = {StackTraceElement@3078} "java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172)"
4 = {StackTraceElement@3079} "java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)"
5 = {StackTraceElement@3080} "reactor.blockhound.TestThread.(TestThread.java:29)"
6 = {StackTraceElement@3081} "reactor.blockhound.BlockHound$Builder.testInstrumentation(BlockHound.java:462)"
7 = {StackTraceElement@3082} "reactor.blockhound.BlockHound$Builder.install(BlockHound.java:445)"
8 = {StackTraceElement@3083} "reactor.blockhound.BlockHound.install(BlockHound.java:95)"
from blockhound.
I'm closing this issue because there is a work around (see previous posted sample demo project).
Feel free to reopen if needed.
from blockhound.
Related Issues (20)
- `java.nio.channels.FileChannel` related operations are not detected as blocking
- BlockHoundIntegration.compareTo doesn't allow integrations loaded via SPI to control ordering based on initial position in stream. HOT 3
- build a skip or disable feature for individual tests HOT 2
- BlockHound does not support java 18
- Blockhound turn off and on for junit platform HOT 2
- Thread.sleep not detected HOT 2
- ClassCircularityError when using the agent with Tomcat HOT 7
- BlockHoundTestExecutionListener could not be instantiated (JDK 17) HOT 3
- unnamed module @45312be2 HOT 8
- Candidates to be included as default allowances
- Blockhound failing with new version of micrometer HOT 24
- Error using java 17 & infinispan starter HOT 4
- [Byte Buddy] ERROR reactor.core.publisher.ContextPropagation [jdk.internal.loader.ClassLoaders$AppClassLoader@266474c2, unnamed module @6c9f5c0d, Thread[mythread-1,5,main], loaded=false] HOT 5
- Bootstrap loading
- Using JDK 18 or greater makes the JVM log an issue while loading `Unsafe.park` HOT 1
- BlockHound does not flag Thread.sleep(long, int) since JDK 21 HOT 2
- Detect Synchronized Methods HOT 1
- IllegalMonitorStateException in ThreadPoolExecutor with Redisson Integration HOT 7
- Java 22 Support HOT 11
- Blockhound + Opentelemetry agent fail on install HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from blockhound.