Skip to content

Instantly share code, notes, and snippets.

View john77eipe's full-sized avatar
💥

John Eipe john77eipe

💥
View GitHub Profile
/**
* Basic version
* @author johne
*
*/
@WebServlet(urlPatterns = "/Weather/v1", asyncSupported = true)
public class WeatherDataStream extends HttpServlet {
private static final long serialVersionUID = 1L;
// Keeps all open connections from browsers
<body>
<h3>Climate Temperature Toolbox</h3>
<input type="button" value="start" id="start" />
Send Weather Data for your home city:
<br /><br />
City: <input type="text" id="home-city" />
Celsius: <input type="text" id="home-temperature" />
<input type="button" value="send" id="send" />
<br />
Weather Data from other cities:
// tell the browser if connection
// fails to reopen it after 10 seconds
response.getWriter().println("retry: 10000\n");
// Start asynchronous context and add listeners to remove it in case
// of errors
final AsyncContext ac = request.startAsync();
log("Default timeout for this asyncContext: "+ac.getTimeout());
// The timeout will expire if neither the complete() method nor any of the dispatch methods are called on the
// asyncContext.
<body>
<h3>Climate Temperature Toolbox</h3>
<input type="button" value="start" id="start" />
<input type="button" value="stop" id="stop" />
Send Weather Data for your home city:
<br /><br />
City: <input type="text" id="home-city" />
Celsius: <input type="text" id="home-temperature" />
<input type="button" value="send" id="send" />
<br />
private AtomicInteger counter = new AtomicInteger(1);
private boolean sendMessage(PrintWriter writer, WeatherToken token) {
writer.print("id: ");
writer.println(counter.getAndIncrement());
writer.println("event: city");
writer.print("data: ");
writer.println(token.getType()+":"+token.getData());
writer.println(); //new line marks an event boundary
return writer.checkError(); //checkError() calls writer.flush();
}
@WebServlet(urlPatterns = "/Weather/v4", asyncSupported = true)
public class WeatherDataStream extends HttpServlet {
private static final long serialVersionUID = 1L;
// Keeps all open connections from browsers
private Set<AsyncContext> asyncContexts = new HashSet<AsyncContext>();
// Temporary store for messages when arrived
private Queue<WeatherToken> tokenQueue = new CircularFifoQueue<WeatherToken>(5);
private AtomicInteger counter = new AtomicInteger(1);
@john77eipe
john77eipe / TestingExecutorService.java
Created September 25, 2016 19:23
Threading fun!!!
package testex;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@john77eipe
john77eipe / TestThreads.java
Created September 25, 2016 19:24
Daemon and User threads
package testex;
/**
* Notice the difference between daemon (background) threads and non-daemon (user) threads
* - Finally blocks are not executed for daemon threads
* - JVM is concerned about user threads only
* - JVM exits when all user threads are completed in other words JVM waits for user threads to run to completion
* - JVM doesn't wait for daemon threads - simply kills it when JVM is ready to exit (or killed by user action)
* - If any clean up needs to be done for daemon threads (works for user threads also) put them as a shutdown hook
* @author johne
package async;
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
package async;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;