Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Rxandroid | 19,770 | 10,146 | 214 | a month ago | 6 | February 15, 2019 | 1 | apache-2.0 | Java | |
RxJava bindings for Android | ||||||||||
Rxjava Android Samples | 7,548 | 6 months ago | 10 | apache-2.0 | Java | |||||
Learning RxJava for Android by example | ||||||||||
Rxbus | 2,088 | 102 | 1 | 2 years ago | 13 | January 09, 2021 | 6 | apache-2.0 | Java | |
Event Bus By RxJava. | ||||||||||
Blockhound | 1,163 | 14 | 9 days ago | 7 | April 06, 2021 | 16 | apache-2.0 | Java | ||
Java agent to detect blocking calls from non-blocking threads. | ||||||||||
Mvvm Kotlin Android Architecture | 1,147 | 2 years ago | 6 | apache-2.0 | Kotlin | |||||
MVVM + Kotlin + Retrofit2 + Hilt + Coroutines + Kotlin Flow + mockK + Espresso + Junit5 | ||||||||||
Reaktive | 1,031 | 1 | 13 days ago | 4 | June 13, 2022 | 7 | apache-2.0 | Kotlin | ||
Kotlin multi-platform implementation of Reactive Extensions | ||||||||||
Rxjavafx | 494 | 27 | 2 | 2 years ago | 18 | February 25, 2017 | 18 | apache-2.0 | Java | |
RxJava bindings for JavaFX | ||||||||||
Asyncawait | 410 | 5 years ago | 9 | apache-2.0 | Kotlin | |||||
async/await for Android built upon coroutines introduced in Kotlin 1.1 | ||||||||||
Inlineactivityresult | 214 | 3 years ago | mit | Java | ||||||
Receive the activity result directly after the startActivityForResult with InlineActivityResult | ||||||||||
Rxkotlinfx | 176 | 7 | 3 | 2 years ago | 19 | November 27, 2017 | 8 | apache-2.0 | Kotlin | |
Kotlin extensions to the RxJavaFX framework |
Java agent to detect blocking calls from non-blocking threads.
BlockHound will transparently instrument the JVM classes and intercept blocking calls (e.g. IO) if they are performed from threads marked as "non-blocking operations only" (ie. threads implementing Reactor's NonBlocking
marker interface, like those started by Schedulers.parallel()
). If and when this happens (but remember, this should never happen!😜), an error will be thrown. Here is an example:
// Example.java
BlockHound.install();
Mono.delay(Duration.ofSeconds(1))
.doOnNext(it -> {
try {
Thread.sleep(10);
}
catch (InterruptedException e) {
throw new RuntimeException(e);
}
})
.block();
Will result in:
reactor.blockhound.BlockingOperationError: Blocking call! java.lang.Thread.sleep
at java.base/java.lang.Thread.sleep(Native Method)
at com.example.Example.lambda$exampleTest$0(Example.java:16)
Note that it points to the exact place where the blocking call got triggered. In this example it was Example.java:16
.
Download it from Maven Central repositories (stable releases only) or repo.spring.io:
Gradle
repositories {
mavenCentral()
// maven { url 'https://repo.spring.io/milestone' }
// maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
testImplementation 'io.projectreactor.tools:blockhound:$LATEST_RELEASE'
// testImplementation 'io.projectreactor.tools:blockhound:$LATEST_MILESTONE'
// testImplementation 'io.projectreactor.tools:blockhound:$LATEST_SNAPSHOT'
}
Maven
<dependencies>
<dependency>
<groupId>io.projectreactor.tools</groupId>
<artifactId>blockhound</artifactId>
<version>$LATEST_RELEASE</version>
</dependency>
</dependencies>
Where:
$LATEST_RELEASE |
|
$LATEST_MILESTONE |
|
$LATEST_SNAPSHOT |
for JDK 13+, it is no longer allowed redefining native methods. So for the moment, as a temporary work around, please use the
-XX:+AllowRedefinitionToAddDeleteMethods
jvm argument:
Maven
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>-XX:+AllowRedefinitionToAddDeleteMethods</argLine>
</configuration>
</plugin>
Gradle
tasks.withType(Test).all {
if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_13)) {
jvmArgs += [
"-XX:+AllowRedefinitionToAddDeleteMethods"
]
}
}
Although BlockHound supports the SPI mechanism to integrate with, it comes with a few built-in integrations:
reactor-core
version 3.3.0, there is a built-in integration in Reactor itself that uses the SPI.See the docs.
Licensed under Apache Software License 2.0
Sponsored by Pivotal