Dieser Inhalt ist in der von Ihnen ausgewählten Sprache nicht verfügbar.
46.6. Asynchronous Processing on the Client
Overview Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
JAX-RS 2.0 supports asynchronous processing of invocations on the client side. Two different styles of asynchronous processing are supported: either using a
java.util.concurrent.Future<V> return value; or by registering an invocation callback.
Asynchronous invocation with Future return value Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Using the
Future<V> approach to asynchronous processing, you can invoke a client request asynchronously, as follows:
// Java
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import java.util.concurrent.Future;
import javax.ws.rs.core.Response;
...
Client client = ClientBuilder.newClient();
Future<Response> futureResp = client.target("http://example.org/bookstore/books/123")
.request("application/xml")
.async()
.get();
...
// At a later time, check (and wait) for the response:
Response resp = futureResp.get();
You can use a similar approach for typed responses. For example, to get a response of type,
BookInfo:
Client client = ClientBuilder.newClient();
Future<BookInfo> futureResp = client.target("http://example.org/bookstore/books/123")
.request("application/xml")
.async()
.get(BookInfo.class);
...
// At a later time, check (and wait) for the response:
BookInfo resp = futureResp.get();
Asynchronous invocation with invocation callback Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Instead of accessing the return value using a Future<V> object, you can define an invocation callback (using
javax.ws.rs.client.InvocationCallback<RESPONSE>), as follows:
// Java
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import java.util.concurrent.Future;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.InvocationCallback;
...
Client client = ClientBuilder.newClient();
Future<Response> futureResp = client.target("http://example.org/bookstore/books/123")
.request("application/xml")
.async()
.get(
new InvocationCallback<Response>() {
@Override
public void completed(final Response resp) {
// Do something when invocation is complete
...
}
@Override
public void failed(final Throwable throwable) {
throwable.printStackTrace();
}
});
...
You can use a similar approach for typed responses:
// Java
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import java.util.concurrent.Future;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.InvocationCallback;
...
Client client = ClientBuilder.newClient();
Future<BookInfo> futureResp = client.target("http://example.org/bookstore/books/123")
.request("application/xml")
.async()
.get(
new InvocationCallback<BookInfo>() {
@Override
public void completed(final BookInfo resp) {
// Do something when invocation is complete
...
}
@Override
public void failed(final Throwable throwable) {
throwable.printStackTrace();
}
});
...