Any suggestions of doing refreshing data in a web module?

L

lightning

Some data(xxx.txt) may be updated at some time.
I start a new thread to refresh the data.
Below is the code:


public class IPLookerServlet extends HttpServlet {
static TreeMap<Long, String> map;

static ExecutorService s = Executors.newSingleThreadExecutor();

static String ipRepFile;

static boolean isRunning = true;

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
System.out.println("it destroyed!!!!!!!!!!!!!!");
isRunning = false;
s.shutdown();
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
ipRepFile = getInitParameter("ipRepFile");
try {
map = getIPInfo(ipRepFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

s.execute(new Runnable() {
int c = 0;

public void run() {
// TODO Auto-generated method stub
while (isRunning) {
try {
Thread.sleep(1000);
c = (c++) % (30 * 60);//every half an hour.
if (c == 0) {
map = getIPInfo(ipRepFile);
System.out.println("refreshed ip repository");
}
} catch (IOException e) {
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
System.out.println("init
complete!!!!!!!!!");

}

private static TreeMap<Long, String> getIPInfo(String file) throws
IOException {
TreeMap<Long, String> r = new TreeMap<Long, String>();
BufferedReader in = new BufferedReader(new FileReader(file));
String buf = null;
Pattern p = Pattern
.compile("^(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s+(\\d+\\.\\d+\\.\\d+\\.\\d
+)\\s+(.+)");
while ((buf = in.readLine()) != null) {
Matcher m = p.matcher(buf);
while (m.find()) {
long start = dealDot(m.group(1));
r.put(start, m.group(3));
}
}
in.close();
return r;
}
....
}
 
L

lightning

And I start the servlet at the container's start


<servlet>
<servlet-name>IPLookerServlet</servlet-name>
<servlet-class>
com.youliao.servlets.config.IPLookerServlet
</servlet-class>
<init-param>
<param-name>ipRepFile</param-name>
<param-value>e:\IPData.txt</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
 
L

lightning

Some corrections...:

c = (c+1) % (5 * 60);
and field c is put in IPLookerServlet now.

...

static String ipRepFile;

static boolean isRunning = true;
static int c = 0;
...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top