Skip to content

Commit f7997e3

Browse files
committed
upgrade to RxJava 2.0
1 parent 3059844 commit f7997e3

File tree

13 files changed

+74
-61
lines changed

13 files changed

+74
-61
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ plugins {
1717

1818

1919

20-
version "1.0.1.BUILD-SNAPSHOT"
20+
version "2.0.0.BUILD-SNAPSHOT"
2121
group "org.grails.plugins"
2222

2323
apply plugin:"eclipse"
@@ -50,7 +50,7 @@ dependencies {
5050
compile "org.springframework.boot:spring-boot-starter-tomcat"
5151
compile "org.grails:grails-dependencies"
5252
compile "org.grails:grails-web-boot"
53-
compile 'io.reactivex:rxjava:1.1.3'
53+
compile 'io.reactivex.rxjava2:rxjava:2.0.0'
5454

5555
console "org.grails:grails-console"
5656

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
grailsVersion=3.1.9
1+
grailsVersion=3.1.13
22
gradleWrapperVersion=2.13

src/main/groovy/grails/rx/web/Rx.groovy

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import grails.web.databinding.DataBindingUtils
55
import grails.web.mapping.mvc.exceptions.CannotRedirectException
66
import groovy.transform.CompileDynamic
77
import groovy.transform.CompileStatic
8+
import io.reactivex.Emitter
9+
import io.reactivex.Observable
10+
import io.reactivex.ObservableEmitter
11+
import io.reactivex.ObservableOnSubscribe
812
import org.grails.plugins.rx.web.NewObservableResult
913
import org.grails.plugins.rx.web.ObservableResult
1014
import org.grails.plugins.rx.web.StreamingNewObservableResult
@@ -15,8 +19,6 @@ import org.grails.web.servlet.mvc.GrailsWebRequest
1519
import org.springframework.web.context.request.RequestContextHolder
1620
import org.springframework.web.context.request.async.WebAsyncManager
1721
import org.springframework.web.context.request.async.WebAsyncUtils
18-
import rx.Observable
19-
import rx.Subscriber
2022

2123
import javax.servlet.ServletInputStream
2224
import javax.servlet.http.HttpServletRequest
@@ -178,8 +180,8 @@ class Rx {
178180
*/
179181
@CompileDynamic
180182
static Observable bindData(Object object, Object bindingSource, Map arguments = Collections.emptyMap(), String filter = null) {
181-
Observable.create( { Subscriber<? super Object> subscriber ->
182-
subscriber.onStart()
183+
Observable.create( { ObservableEmitter<? super Object> subscriber ->
184+
// subscriber.onStart()
183185
Promises.task {
184186
if(bindingSource instanceof HttpServletRequest) {
185187
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(bindingSource)
@@ -204,10 +206,10 @@ class Rx {
204206
object.properties = bindingSource
205207
}
206208
subscriber.onNext(object)
207-
subscriber.onCompleted()
209+
subscriber.onComplete()
208210

209211
}
210-
} as Observable.OnSubscribe<Object>)
212+
} as ObservableOnSubscribe<Object>)
211213
}
212214

213215

@@ -219,8 +221,8 @@ class Rx {
219221
* @return An observable
220222
*/
221223
static Observable<InputStream> fromBody(HttpServletRequest request) {
222-
Observable.create( { Subscriber<InputStream> subscriber ->
223-
subscriber.onStart()
224+
Observable.create( { ObservableEmitter<InputStream> subscriber ->
225+
// subscriber.onStart()
224226
Promises.task {
225227
InputStream inputStream = null
226228
try {
@@ -231,12 +233,12 @@ class Rx {
231233
subscriber.onError(e)
232234
}
233235
} finally {
234-
subscriber.onCompleted()
236+
subscriber.onComplete()
235237
inputStream?.close()
236238
}
237239

238240
}
239-
} as Observable.OnSubscribe<InputStream>)
241+
} as ObservableOnSubscribe<InputStream>)
240242
}
241243

242244
/**
@@ -257,7 +259,7 @@ class Rx {
257259
* @param callable The closure
258260
* @return The observable result
259261
*/
260-
static <T> NewObservableResult<T> create(@DelegatesTo(Subscriber) Closure<T> callable) {
262+
static <T> NewObservableResult<T> create(@DelegatesTo(Emitter) Closure<T> callable) {
261263
return new NewObservableResult<T>(callable, -1L)
262264
}
263265

@@ -266,7 +268,7 @@ class Rx {
266268
* @param callable The closure
267269
* @return The observable result
268270
*/
269-
static <T> NewObservableResult<T> create(Long timeout, TimeUnit unit, @DelegatesTo(Subscriber) Closure<T> callable) {
271+
static <T> NewObservableResult<T> create(Long timeout, TimeUnit unit, @DelegatesTo(Emitter) Closure<T> callable) {
270272
return new NewObservableResult<T>(callable, timeout, unit)
271273
}
272274

@@ -275,7 +277,7 @@ class Rx {
275277
* @param callable The closure
276278
* @return The observable result
277279
*/
278-
static <T> NewObservableResult<T> create(Long timeout, @DelegatesTo(Subscriber) Closure<T> callable) {
280+
static <T> NewObservableResult<T> create(Long timeout, @DelegatesTo(Emitter) Closure<T> callable) {
279281
return new NewObservableResult<T>(callable, timeout)
280282
}
281283

@@ -314,7 +316,7 @@ class Rx {
314316
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
315317
* @return An observable result
316318
*/
317-
static <T> StreamingNewObservableResult<T> stream(Long timeout, TimeUnit unit, @DelegatesTo(Subscriber) Closure callable) {
319+
static <T> StreamingNewObservableResult<T> stream(Long timeout, TimeUnit unit, @DelegatesTo(Emitter) Closure callable) {
318320
return new StreamingNewObservableResult<T>(callable, timeout, unit)
319321
}
320322

@@ -325,7 +327,7 @@ class Rx {
325327
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
326328
* @return An observable result
327329
*/
328-
static <T> StreamingNewObservableResult<T> stream(Long timeout, @DelegatesTo(Subscriber) Closure callable) {
330+
static <T> StreamingNewObservableResult<T> stream(Long timeout, @DelegatesTo(Emitter) Closure callable) {
329331
return new StreamingNewObservableResult<T>(callable, timeout)
330332
}
331333

@@ -335,7 +337,7 @@ class Rx {
335337
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
336338
* @return An observable result
337339
*/
338-
static <T> StreamingNewObservableResult<T> stream(@DelegatesTo(Subscriber) Closure callable) {
340+
static <T> StreamingNewObservableResult<T> stream(@DelegatesTo(Emitter) Closure callable) {
339341
return new StreamingNewObservableResult<T>(callable, -1L)
340342
}
341343
/**

src/main/groovy/grails/rx/web/helper/RxHelper.groovy

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package grails.rx.web.helper
33
import grails.rx.web.Rx
44
import groovy.transform.CompileDynamic
55
import groovy.transform.CompileStatic
6+
import io.reactivex.Emitter
7+
import io.reactivex.Observable
68
import org.grails.plugins.rx.web.NewObservableResult
79
import org.grails.plugins.rx.web.ObservableResult
810
import org.grails.plugins.rx.web.StreamingNewObservableResult
911
import org.grails.plugins.rx.web.StreamingObservableResult
1012
import org.grails.plugins.rx.web.result.RxResult
1113
import org.grails.web.converters.Converter
12-
import rx.Observable
13-
import rx.Subscriber
1414

1515
import javax.servlet.http.HttpServletRequest
1616
import java.util.concurrent.TimeUnit
@@ -212,7 +212,7 @@ class RxHelper {
212212
* @param callable The closure
213213
* @return The observable result
214214
*/
215-
public <T> NewObservableResult<T> create(@DelegatesTo(Subscriber) Closure<T> callable) {
215+
public <T> NewObservableResult<T> create(@DelegatesTo(Emitter) Closure<T> callable) {
216216
Rx.create callable
217217
}
218218

@@ -221,7 +221,7 @@ class RxHelper {
221221
* @param callable The closure
222222
* @return The observable result
223223
*/
224-
public <T> NewObservableResult<T> create(Long timeout, TimeUnit unit, @DelegatesTo(Subscriber) Closure<T> callable) {
224+
public <T> NewObservableResult<T> create(Long timeout, TimeUnit unit, @DelegatesTo(Emitter) Closure<T> callable) {
225225
Rx.create timeout, unit, callable
226226
}
227227

@@ -230,7 +230,7 @@ class RxHelper {
230230
* @param callable The closure
231231
* @return The observable result
232232
*/
233-
public <T> NewObservableResult<T> create(Long timeout, @DelegatesTo(Subscriber) Closure<T> callable) {
233+
public <T> NewObservableResult<T> create(Long timeout, @DelegatesTo(Emitter) Closure<T> callable) {
234234
Rx.create timeout, callable
235235
}
236236

@@ -267,7 +267,7 @@ class RxHelper {
267267
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
268268
* @return An observable result
269269
*/
270-
public <T> StreamingNewObservableResult<T> stream(Long timeout, TimeUnit unit, @DelegatesTo(Subscriber) Closure callable) {
270+
public <T> StreamingNewObservableResult<T> stream(Long timeout, TimeUnit unit, @DelegatesTo(Emitter) Closure callable) {
271271
Rx.stream timeout, unit, callable
272272
}
273273

@@ -278,7 +278,7 @@ class RxHelper {
278278
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
279279
* @return An observable result
280280
*/
281-
public <T> StreamingNewObservableResult<T> stream(Long timeout, @DelegatesTo(Subscriber) Closure callable) {
281+
public <T> StreamingNewObservableResult<T> stream(Long timeout, @DelegatesTo(Emitter) Closure callable) {
282282
Rx.stream timeout, callable
283283
}
284284

@@ -288,7 +288,7 @@ class RxHelper {
288288
* @param callable The closure, it should accept a single argument which is the rx.Subscriber instance
289289
* @return An observable result
290290
*/
291-
public <T> StreamingNewObservableResult<T> stream(@DelegatesTo(Subscriber) Closure callable) {
291+
public <T> StreamingNewObservableResult<T> stream(@DelegatesTo(Emitter) Closure callable) {
292292
Rx.stream callable
293293
}
294294
/**

src/main/groovy/org/grails/plugins/rx/renderer/ObservableRenderer.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import grails.util.GrailsWebUtil
77
import grails.web.mime.MimeType
88
import groovy.transform.CompileDynamic
99
import groovy.transform.CompileStatic
10+
import io.reactivex.Observable
1011
import org.grails.plugins.rx.web.RxResultTransformer
1112
import org.grails.plugins.web.rest.render.ServletRenderContext
1213
import org.springframework.beans.factory.annotation.Autowired
13-
import rx.Observable
1414

1515
/**
1616
* A renderer for observables

src/main/groovy/org/grails/plugins/rx/web/NewObservableResult.groovy

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package org.grails.plugins.rx.web
22

33
import groovy.transform.CompileStatic
4-
import rx.Observable
5-
import rx.Subscriber
4+
import io.reactivex.Emitter
65

76
import java.util.concurrent.TimeUnit
87

@@ -21,7 +20,7 @@ class NewObservableResult<T> extends TimeoutResult {
2120
super(timeout, unit)
2221
this.callable = callable
2322
def parameterTypes = this.callable.parameterTypes
24-
boolean isSubscriber = parameterTypes.length == 1 && Subscriber.isAssignableFrom(parameterTypes[0])
23+
boolean isSubscriber = parameterTypes.length == 1 && Emitter.isAssignableFrom(parameterTypes[0])
2524
if(!isSubscriber) {
2625
throw new IllegalArgumentException("Passed closure must accept argument of type rx.Subscriber")
2726
}

src/main/groovy/org/grails/plugins/rx/web/ObservableResult.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.grails.plugins.rx.web
22

33
import groovy.transform.CompileStatic
4-
import rx.Observable
4+
import io.reactivex.Observable
55

66
import java.util.concurrent.TimeUnit
77

src/main/groovy/org/grails/plugins/rx/web/RxResultSubscriber.groovy

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import grails.web.UrlConverter
77
import grails.web.mapping.LinkGenerator
88
import groovy.transform.CompileStatic
99
import groovy.util.logging.Slf4j
10+
import io.reactivex.Emitter
11+
import io.reactivex.Observer
12+
import io.reactivex.disposables.Disposable
1013
import org.grails.plugins.rx.web.result.ForwardResult
1114
import org.grails.plugins.rx.web.result.RxCompletionStrategy
1215
import org.grails.plugins.rx.web.result.RxResult
@@ -18,19 +21,17 @@ import org.grails.web.util.WebUtils
1821
import org.springframework.http.HttpStatus
1922
import org.springframework.web.context.request.RequestContextHolder
2023
import org.springframework.web.context.request.async.WebAsyncUtils
21-
import rx.Subscriber
2224

2325
import javax.servlet.AsyncEvent
2426
import javax.servlet.AsyncListener
25-
import javax.servlet.ServletResponse
2627
import javax.servlet.http.HttpServletRequest
2728
import javax.servlet.http.HttpServletResponse
2829

2930
/**
30-
* <p>A {@link Subscriber} that processed items emitted from an {@link rx.Observable} and produces
31+
* <p>A {@link Emitter} that processed items emitted from an {@link Observable} and produces
3132
* an appropriate response.</p>
3233
*
33-
* <p>If the {@link rx.Observable} emits a {@link RxResult} then processing is delegated to the result with the execute method
34+
* <p>If the {@link Observable} emits a {@link RxResult} then processing is delegated to the result with the execute method
3435
* being wrapped in the asynchronous request.</p>
3536
*
3637
* <p>Otherwise the current controller's respond method is called with the object emitted from the observable</p>
@@ -41,7 +42,7 @@ import javax.servlet.http.HttpServletResponse
4142
*/
4243
@CompileStatic
4344
@Slf4j
44-
class RxResultSubscriber extends Subscriber implements AsyncListener {
45+
class RxResultSubscriber implements AsyncListener, Observer {
4546
/**
4647
* The prefix for server sent events
4748
*/
@@ -91,6 +92,11 @@ class RxResultSubscriber extends Subscriber implements AsyncListener {
9192
*/
9293
String serverSendEventName
9394

95+
/**
96+
* the disposable
97+
*/
98+
Disposable disposable
99+
94100
protected RxCompletionStrategy completionStrategy = RxCompletionStrategy.DEFAULT
95101

96102
RxResultSubscriber(GrailsAsyncContext asyncContext,
@@ -106,12 +112,17 @@ class RxResultSubscriber extends Subscriber implements AsyncListener {
106112
this.asyncContext.addListener(this)
107113
}
108114

115+
@Override
116+
void onSubscribe(Disposable d) {
117+
disposable = d
118+
}
119+
109120
@Override
110121
void onNext(Object o) {
111122
synchronized (asyncContext) {
112123
if(asyncComplete) {
113-
if( !isUnsubscribed() ) {
114-
unsubscribe()
124+
if( disposable != null && !disposable.isDisposed() ) {
125+
disposable.dispose()
115126
}
116127
return
117128
}
@@ -200,7 +211,7 @@ class RxResultSubscriber extends Subscriber implements AsyncListener {
200211
}
201212

202213
@Override
203-
void onCompleted() {
214+
void onComplete() {
204215
synchronized (asyncContext) {
205216
// When the observable finishes emitting items
206217
// terminate the asynchronous context in the appropriate manner based on the
@@ -264,18 +275,18 @@ class RxResultSubscriber extends Subscriber implements AsyncListener {
264275
void onComplete(AsyncEvent event) throws IOException {
265276
synchronized (asyncContext) {
266277
asyncComplete = true
267-
if(!isUnsubscribed()) {
268-
unsubscribe()
278+
if( disposable != null && !disposable.isDisposed() ) {
279+
disposable.dispose()
269280
}
281+
270282
}
271283
}
272284

273285
@Override
274286
void onTimeout(AsyncEvent event) throws IOException {
275287
synchronized (asyncContext) {
276-
277-
if(!isUnsubscribed()) {
278-
unsubscribe()
288+
if( disposable != null && !disposable.isDisposed() ) {
289+
disposable.dispose()
279290
onError(event.throwable)
280291
asyncComplete = true
281292
}
@@ -285,8 +296,8 @@ class RxResultSubscriber extends Subscriber implements AsyncListener {
285296
@Override
286297
void onError(AsyncEvent event) throws IOException {
287298
synchronized (asyncContext) {
288-
if(!isUnsubscribed()) {
289-
unsubscribe()
299+
if( disposable != null && !disposable.isDisposed() ) {
300+
disposable.dispose()
290301
onError(event.throwable)
291302
asyncComplete = true
292303
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy