### Question:
ServerTransactionListener extends UnicastExportable implements Transaction, RemoteTransactionListener { public void rollback() throws IllegalStateException, SystemException { try { executeOnClient(new Rollback()); } catch (ExecutionException e) { Throwable cause = e.getCause(); if (cause instanceof SystemException) throw (SystemException) cause; if (cause instanceof RuntimeException) throw (RuntimeException) cause; throw new RuntimeException("Error reported by server", cause); } } ServerTransactionListener(final BlobStore store, final Map<String, String> hints,
                                   Exporter exporter); Operation<?> getNextOperation(); void postResult(Result<?> result); void commit(); boolean delistResource(XAResource xaRes, int flags); boolean enlistResource(XAResource xaRes); int getStatus(); void registerSynchronization(Synchronization sync); void rollback(); void setRollbackOnly(); XAResource getXAResource(RemoteXAResource res);  }### Answer:
@Test public void testRollback() throws Exception { Future<Void> future = executor.submit(new Callable<Void>() { public Void call() throws Exception { st.rollback(); return null; } }); Operation<?> op = st.getNextOperation(); assertTrue(op instanceof Rollback); st.postResult(new Result<Void>()); assertNull(future.get()); }