Browse Source

Drop support for RxJava 1 and 2.

Closes: #3839
pull/3959/head
Christoph Strobl 4 years ago
parent
commit
9f1448df44
No known key found for this signature in database
GPG Key ID: 8CC1AB53391458C8
  1. 23
      spring-data-mongodb/pom.xml
  2. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactoryBean.java
  3. 236
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java
  4. 4
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoryConfigurationExtensionUnitTests.java
  5. 4
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/custom/CustomReactiveMongoRepository.java

23
spring-data-mongodb/pom.xml

@ -122,27 +122,6 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>${rxjava}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava-reactive-streams</artifactId>
<version>${rxjava-reactive-streams}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>${rxjava2}</version>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>io.reactivex.rxjava3</groupId> <groupId>io.reactivex.rxjava3</groupId>
<artifactId>rxjava</artifactId> <artifactId>rxjava</artifactId>
@ -228,6 +207,7 @@
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.glassfish</groupId> <groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId> <artifactId>jakarta.el</artifactId>
@ -236,7 +216,6 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>jakarta.enterprise</groupId> <groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId> <artifactId>jakarta.enterprise.cdi-api</artifactId>

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactoryBean.java

@ -38,7 +38,6 @@ import org.springframework.util.Assert;
* @author Christoph Strobl * @author Christoph Strobl
* @since 2.0 * @since 2.0
* @see org.springframework.data.repository.reactive.ReactiveSortingRepository * @see org.springframework.data.repository.reactive.ReactiveSortingRepository
* @see org.springframework.data.repository.reactive.RxJava2SortingRepository
* @see org.springframework.data.repository.reactive.RxJava3SortingRepository * @see org.springframework.data.repository.reactive.RxJava3SortingRepository
*/ */
public class ReactiveMongoRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> public class ReactiveMongoRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable>

236
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java

@ -17,17 +17,16 @@ package org.springframework.data.mongodb.repository;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import io.reactivex.Flowable; import io.reactivex.rxjava3.observers.TestObserver;
import io.reactivex.Maybe; import io.reactivex.rxjava3.core.Observable;
import io.reactivex.observers.TestObserver; import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.subscribers.TestSubscriber; import io.reactivex.rxjava3.subscribers.TestSubscriber;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.data.repository.reactive.RxJava3SortingRepository;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.test.StepVerifier; import reactor.test.StepVerifier;
import rx.Observable;
import rx.Single;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -46,7 +45,6 @@ import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories; import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
import org.springframework.data.repository.reactive.ReactiveSortingRepository; import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import org.springframework.data.repository.reactive.RxJava2SortingRepository;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
@ -61,8 +59,6 @@ public class ConvertingReactiveMongoRepositoryTests {
@EnableReactiveMongoRepositories( @EnableReactiveMongoRepositories(
includeFilters = { @Filter(value = ReactivePersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE), includeFilters = { @Filter(value = ReactivePersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE),
@Filter(value = RxJava1PersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE),
@Filter(value = RxJava2PersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE),
@Filter(value = RxJava3PersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE), @Filter(value = RxJava3PersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE),
@Filter(value = MixedReactivePersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE) }, @Filter(value = MixedReactivePersonRepostitory.class, type = FilterType.ASSIGNABLE_TYPE) },
considerNestedRepositories = true) considerNestedRepositories = true)
@ -71,8 +67,6 @@ public class ConvertingReactiveMongoRepositoryTests {
@Autowired MixedReactivePersonRepostitory reactiveRepository; @Autowired MixedReactivePersonRepostitory reactiveRepository;
@Autowired ReactivePersonRepostitory reactivePersonRepostitory; @Autowired ReactivePersonRepostitory reactivePersonRepostitory;
@Autowired RxJava1PersonRepostitory rxJava1PersonRepostitory;
@Autowired RxJava2PersonRepostitory rxJava2PersonRepostitory;
@Autowired RxJava3PersonRepostitory rxJava3PersonRepostitory; @Autowired RxJava3PersonRepostitory rxJava3PersonRepostitory;
ReactivePerson dave, oliver, carter, boyd, stefan, leroi, alicia; ReactivePerson dave, oliver, carter, boyd, stefan, leroi, alicia;
@ -106,162 +100,24 @@ public class ConvertingReactiveMongoRepositoryTests {
StepVerifier.create(reactivePersonRepostitory.findByLastname(boyd.getLastname())).expectNext(boyd).verifyComplete(); StepVerifier.create(reactivePersonRepostitory.findByLastname(boyd.getLastname())).expectNext(boyd).verifyComplete();
} }
@Test // DATAMONGO-1444
public void simpleRxJava1MethodsShouldWork() {
rxJava1PersonRepostitory.existsById(dave.getId()) //
.test() //
.awaitTerminalEvent() //
.assertValue(true) //
.assertNoErrors() //
.assertCompleted();
}
@Test // DATAMONGO-1444
public void existsWithSingleRxJava1IdMethodsShouldWork() {
rxJava1PersonRepostitory.existsById(Single.just(dave.getId())) //
.test() //
.awaitTerminalEvent() //
.assertValue(true) //
.assertNoErrors() //
.assertCompleted();
}
@Test // DATAMONGO-1444
public void singleRxJava1QueryMethodShouldWork() {
rxJava1PersonRepostitory.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValue(dave) //
.assertNoErrors() //
.assertCompleted();
}
@Test // DATAMONGO-1444
public void singleProjectedRxJava1QueryMethodShouldWork() {
List<ProjectedPerson> people = rxJava1PersonRepostitory.findProjectedByLastname(carter.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValueCount(1) //
.assertNoErrors() //
.assertCompleted() //
.getOnNextEvents();
ProjectedPerson projectedPerson = people.get(0);
assertThat(projectedPerson.getFirstname()).isEqualTo(carter.getFirstname());
}
@Test // DATAMONGO-1444
public void observableRxJava1QueryMethodShouldWork() {
rxJava1PersonRepostitory.findByLastname(boyd.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValue(boyd) //
.assertNoErrors() //
.assertCompleted() //
.getOnNextEvents();
}
@Test // DATAMONGO-1610
public void simpleRxJava2MethodsShouldWork() {
TestObserver<Boolean> testObserver = rxJava2PersonRepostitory.existsById(dave.getId()).test();
testObserver.awaitTerminalEvent();
testObserver.assertComplete();
testObserver.assertNoErrors();
testObserver.assertValue(true);
}
@Test // DATAMONGO-1610
public void existsWithSingleRxJava2IdMethodsShouldWork() {
TestObserver<Boolean> testObserver = rxJava2PersonRepostitory.existsById(io.reactivex.Single.just(dave.getId()))
.test();
testObserver.awaitTerminalEvent();
testObserver.assertComplete();
testObserver.assertNoErrors();
testObserver.assertValue(true);
}
@Test // DATAMONGO-1610
public void flowableRxJava2QueryMethodShouldWork() {
io.reactivex.subscribers.TestSubscriber<ReactivePerson> testSubscriber = rxJava2PersonRepostitory
.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()).test();
testSubscriber.awaitTerminalEvent();
testSubscriber.assertComplete();
testSubscriber.assertNoErrors();
testSubscriber.assertValue(dave);
}
@Test // DATAMONGO-1610
public void singleProjectedRxJava2QueryMethodShouldWork() {
TestObserver<ProjectedPerson> testObserver = rxJava2PersonRepostitory
.findProjectedByLastname(Maybe.just(carter.getLastname())).test();
testObserver.awaitTerminalEvent();
testObserver.assertComplete();
testObserver.assertNoErrors();
testObserver.assertValue(actual -> {
assertThat(actual.getFirstname()).isEqualTo(carter.getFirstname());
return true;
});
}
@Test // DATAMONGO-1610
public void observableProjectedRxJava2QueryMethodShouldWork() {
TestObserver<ProjectedPerson> testObserver = rxJava2PersonRepostitory
.findProjectedByLastname(Single.just(carter.getLastname())).test();
testObserver.awaitTerminalEvent();
testObserver.assertComplete();
testObserver.assertNoErrors();
testObserver.assertValue(actual -> {
assertThat(actual.getFirstname()).isEqualTo(carter.getFirstname());
return true;
});
}
@Test // DATAMONGO-1610
public void maybeRxJava2QueryMethodShouldWork() {
TestObserver<ReactivePerson> testObserver = rxJava2PersonRepostitory.findByLastname(boyd.getLastname()).test();
testObserver.awaitTerminalEvent();
testObserver.assertComplete();
testObserver.assertNoErrors();
testObserver.assertValue(boyd);
}
@Test // DATAMONGO-2558 @Test // DATAMONGO-2558
public void simpleRxJava3MethodsShouldWork() { public void simpleRxJava3MethodsShouldWork() throws InterruptedException {
TestObserver<Boolean> testObserver = rxJava3PersonRepostitory.existsById(dave.getId()).test(); TestObserver<Boolean> testObserver = rxJava3PersonRepostitory.existsById(dave.getId()).test();
testObserver.awaitTerminalEvent(); testObserver.await();
testObserver.assertComplete(); testObserver.assertComplete();
testObserver.assertNoErrors(); testObserver.assertNoErrors();
testObserver.assertValue(true); testObserver.assertValue(true);
} }
@Test // DATAMONGO-2558 @Test // DATAMONGO-2558
public void existsWithSingleRxJava3IdMethodsShouldWork() { public void existsWithSingleRxJava3IdMethodsShouldWork() throws InterruptedException {
TestObserver<Boolean> testObserver = rxJava3PersonRepostitory.existsById(io.reactivex.Single.just(dave.getId())) TestObserver<Boolean> testObserver = rxJava3PersonRepostitory.existsById(Single.just(dave.getId()))
.test(); .test();
testObserver.awaitTerminalEvent(); testObserver.await();
testObserver.assertComplete(); testObserver.assertComplete();
testObserver.assertNoErrors(); testObserver.assertNoErrors();
testObserver.assertValue(true); testObserver.assertValue(true);
@ -323,17 +179,17 @@ public class ConvertingReactiveMongoRepositoryTests {
testObserver.assertValue(boyd); testObserver.assertValue(boyd);
} }
@Test // DATAMONGO-1444 // @Test // DATAMONGO-1444
public void mixedRepositoryShouldWork() { // public void mixedRepositoryShouldWork() {
//
reactiveRepository.findByLastname(boyd.getLastname()) // // reactiveRepository.findByLastname(boyd.getLastname()) //
.test() // // .test() //
.awaitTerminalEvent() // // .awaitTerminalEvent() //
.assertValue(boyd) // // .assertValue(boyd) //
.assertNoErrors() // // .assertNoErrors() //
.assertCompleted() // // .assertCompleted() //
.getOnNextEvents(); // .getOnNextEvents();
} // }
@Test // DATAMONGO-1444 @Test // DATAMONGO-1444
public void shouldFindOneBySingleOfLastName() { public void shouldFindOneBySingleOfLastName() {
@ -352,50 +208,26 @@ public class ConvertingReactiveMongoRepositoryTests {
.verifyComplete(); .verifyComplete();
} }
@Test // DATAMONGO-1444 // @Test // DATAMONGO-1444
public void shouldFindByPublisherOfLastNameInAndAgeGreater() { // public void shouldFindByPublisherOfLastNameInAndAgeGreater() {
//
List<ReactivePerson> people = reactiveRepository // List<ReactivePerson> people = reactiveRepository
.findByLastnameInAndAgeGreaterThan(Flux.just(carter.getLastname(), dave.getLastname()), 41).test() // // .findByLastnameInAndAgeGreaterThan(Flux.just(carter.getLastname(), dave.getLastname()), 41).test() //
.awaitTerminalEvent() // // .awaitTerminalEvent() //
.assertValueCount(2) // // .assertValueCount(2) //
.assertNoErrors() // // .assertNoErrors() //
.assertCompleted() // // .assertCompleted() //
.getOnNextEvents(); // .getOnNextEvents();
//
assertThat(people).contains(carter, dave); // assertThat(people).contains(carter, dave);
} // }
interface ReactivePersonRepostitory extends ReactiveSortingRepository<ReactivePerson, String> { interface ReactivePersonRepostitory extends ReactiveSortingRepository<ReactivePerson, String> {
Publisher<ReactivePerson> findByLastname(String lastname); Publisher<ReactivePerson> findByLastname(String lastname);
} }
interface RxJava1PersonRepostitory extends org.springframework.data.repository.Repository<ReactivePerson, String> { interface RxJava3PersonRepostitory extends RxJava3SortingRepository<ReactivePerson, String> {
Observable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname);
Single<ReactivePerson> findByLastname(String lastname);
Single<ProjectedPerson> findProjectedByLastname(String lastname);
Single<Boolean> existsById(String id);
Single<Boolean> existsById(Single<String> id);
}
interface RxJava2PersonRepostitory extends RxJava2SortingRepository<ReactivePerson, String> {
Flowable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname);
Maybe<ReactivePerson> findByLastname(String lastname);
io.reactivex.Single<ProjectedPerson> findProjectedByLastname(Maybe<String> lastname);
io.reactivex.Observable<ProjectedPerson> findProjectedByLastname(Single<String> lastname);
}
interface RxJava3PersonRepostitory extends RxJava2SortingRepository<ReactivePerson, String> {
io.reactivex.rxjava3.core.Flowable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname); io.reactivex.rxjava3.core.Flowable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname);

4
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoryConfigurationExtensionUnitTests.java

@ -34,7 +34,7 @@ import org.springframework.data.repository.config.AnnotationRepositoryConfigurat
import org.springframework.data.repository.config.RepositoryConfiguration; import org.springframework.data.repository.config.RepositoryConfiguration;
import org.springframework.data.repository.config.RepositoryConfigurationSource; import org.springframework.data.repository.config.RepositoryConfigurationSource;
import org.springframework.data.repository.reactive.ReactiveCrudRepository; import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.data.repository.reactive.RxJava2CrudRepository; import org.springframework.data.repository.reactive.RxJava3CrudRepository;
/** /**
* Unit tests for {@link ReactiveMongoRepositoryConfigurationExtension}. * Unit tests for {@link ReactiveMongoRepositoryConfigurationExtension}.
@ -108,7 +108,7 @@ public class ReactiveMongoRepositoryConfigurationExtensionUnitTests {
interface SampleRepository extends ReactiveCrudRepository<Sample, Long> {} interface SampleRepository extends ReactiveCrudRepository<Sample, Long> {}
interface UnannotatedRepository extends RxJava2CrudRepository<Store, Long> {} interface UnannotatedRepository extends RxJava3CrudRepository<Store, Long> {}
interface StoreRepository extends ReactiveMongoRepository<Store, Long> {} interface StoreRepository extends ReactiveMongoRepository<Store, Long> {}
} }

4
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/custom/CustomReactiveMongoRepository.java

@ -16,12 +16,12 @@
package org.springframework.data.mongodb.repository.custom; package org.springframework.data.mongodb.repository.custom;
import org.springframework.data.mongodb.repository.User; import org.springframework.data.mongodb.repository.User;
import org.springframework.data.repository.reactive.RxJava2CrudRepository; import org.springframework.data.repository.reactive.RxJava3CrudRepository;
/** /**
* @author Mark Paluch * @author Mark Paluch
*/ */
public interface CustomReactiveMongoRepository public interface CustomReactiveMongoRepository
extends RxJava2CrudRepository<User, String>, CustomReactiveMongoRepositoryCustom { extends RxJava3CrudRepository<User, String>, CustomReactiveMongoRepositoryCustom {
} }

Loading…
Cancel
Save