use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.
the class JaxrsAsyncResource method negative.
@GET
@Path("negative")
@Produces("text/plain")
public void negative(@Suspended final AsyncResponse response) {
response.setTimeout(-1, TimeUnit.MILLISECONDS);
Thread t = new Thread() {
private Logger logger = Logger.getLogger(JaxrsAsyncResource.class);
@Override
public void run() {
try {
logger.info("Started");
Thread.sleep(1000);
Response jaxrs = Response.ok("hello").type(MediaType.TEXT_PLAIN).build();
response.resume(jaxrs);
} catch (Exception e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
logger.error(errors.toString());
}
}
};
t.start();
}
use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.
the class JaxrsAsyncServletJaxrsResource method get.
@GET
@Produces("text/plain")
public void get(@Suspended final AsyncResponse response) throws Exception {
response.setTimeout(2000, TimeUnit.MILLISECONDS);
Thread t = new Thread() {
private Logger logger = Logger.getLogger(JaxrsAsyncServletJaxrsResource.class);
@Override
public void run() {
try {
logger.info("STARTED!!!!");
Thread.sleep(100);
Response jaxrs = Response.ok("hello").type(MediaType.TEXT_PLAIN).build();
response.resume(jaxrs);
} catch (Exception e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
logger.error(errors.toString());
}
}
};
t.start();
}
use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.
the class AsyncResource method timeout.
@GET
@Path("timeout")
@Produces("text/plain")
public void timeout(@Suspended final AsyncResponse response) {
response.setTimeout(10, TimeUnit.MILLISECONDS);
Thread t = new Thread() {
private Logger log = Logger.getLogger(AsyncResource.class);
@Override
public void run() {
try {
Thread.sleep(100000);
Response jaxrs = Response.ok("goodbye").type(MediaType.TEXT_PLAIN).build();
response.resume(jaxrs);
} catch (Exception e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
log.error(errors.toString());
}
}
};
t.start();
}
use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.
the class AsyncRequestFilter method filter.
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.getHeaders().add("RequestFilterCallback" + name, String.valueOf(callbackException));
callbackException = null;
SuspendableContainerRequestContext ctx = (SuspendableContainerRequestContext) requestContext;
String action = ctx.getHeaderString(name);
LOG.error("Filter request for " + name + " with action: " + action);
if ("sync-pass".equals(action)) {
// do nothing
} else if ("sync-fail".equals(action)) {
ctx.abortWith(Response.ok(name).build());
} else if ("async-pass".equals(action)) {
ctx.suspend();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> ctx.resume());
} else if ("async-pass-instant".equals(action)) {
ctx.suspend();
ctx.resume();
} else if ("async-fail".equals(action)) {
ctx.suspend();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> ctx.abortWith(Response.ok(name).build()));
} else if ("async-fail-instant".equals(action)) {
ctx.suspend();
ctx.abortWith(Response.ok(name).build());
} else if ("async-throw-late".equals(action)) {
ctx.suspend();
HttpRequest req = ResteasyContext.getContextData(HttpRequest.class);
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
LOG.error("Error:", e);
}
AsyncResponse resp = req.getAsyncContext().getAsyncResponse();
resp.register((CompletionCallback) (t) -> {
if (callbackException != null)
throw new RuntimeException("Callback called twice");
callbackException = Objects.toString(t);
});
if ("true".equals(req.getHttpHeaders().getHeaderString("UseExceptionMapper")))
ctx.resume(new AsyncFilterException("ouch"));
else
ctx.resume(new Throwable("ouch"));
});
}
LOG.error("Filter request for " + name + " with action: " + action + " done");
}
Aggregations