1 package compbio.ws.server;
\r
3 import java.io.PrintWriter;
\r
4 import java.io.StringWriter;
\r
5 import java.io.Writer;
\r
6 import java.util.Date;
\r
7 import java.util.Map;
\r
8 import java.util.Set;
\r
9 import java.util.concurrent.ConcurrentHashMap;
\r
11 import javax.annotation.Resource;
\r
12 import javax.jws.WebService;
\r
13 import javax.servlet.http.HttpServletRequest;
\r
14 import javax.xml.ws.WebServiceContext;
\r
15 import javax.xml.ws.handler.MessageContext;
\r
17 import org.apache.log4j.Logger;
\r
19 import compbio.data.msa.JABAService;
\r
20 import compbio.ws.client.Jws2Client;
\r
21 import compbio.ws.client.Services;
\r
22 import compbio.ws.client.WSTester;
\r
30 @WebService(endpointInterface = "compbio.data.msa.RegistryWS", targetNamespace = "http://msa.data.compbio/01/12/2010/", serviceName = "RegistryWS")
\r
31 public class RegistryWS implements compbio.data.msa.RegistryWS, JABAService {
\r
33 // Ask for resource injection
\r
35 WebServiceContext wsContext;
\r
37 private static Logger statLog = Logger.getLogger("RegistryWS-stats");
\r
38 private static Logger log = Logger.getLogger(RegistryWS.class);
\r
40 private final static Map<Services, Date> operating = new ConcurrentHashMap<Services, Date>();
\r
43 * 1) Check that the actual executable is configured
\r
45 * 2) Check whether the service is enabled?
\r
47 * 3) Attempt to execute?
\r
52 public Set<Services> getSupportedServices() {
\r
54 return operating.keySet();
\r
57 private void init() {
\r
58 // This can be run concurrently
\r
59 if (operating.isEmpty()) {
\r
64 public Date getLastTestedOn(Services service) {
\r
65 return operating.get(service);
\r
69 public String testAllServices() {
\r
70 Writer testlog = new StringWriter();
\r
71 PrintWriter writer = new PrintWriter(testlog, true);
\r
72 WSTester tester = new WSTester(writer);
\r
74 for (Services service : Services.values()) {
\r
75 JABAService ws = Jws2Client.connect(getServicePath(), service);
\r
76 if (tester.checkService(ws)) {
\r
77 operating.put(service, new Date());
\r
80 return testlog.toString();
\r
83 private String getServicePath() {
\r
84 assert wsContext != null : "WS context injection failed!";
\r
85 MessageContext msContext = wsContext.getMessageContext();
\r
86 HttpServletRequest request = (HttpServletRequest) msContext
\r
87 .get(MessageContext.SERVLET_REQUEST);
\r
89 StringBuffer server = request.getRequestURL();
\r
90 server = server.delete(server.lastIndexOf("/"), server.length());
\r
91 return server.toString();
\r
95 public String testService(Services service) {
\r
96 String server = getServicePath();
\r
97 Writer testlog = new StringWriter();
\r
98 PrintWriter writer = new PrintWriter(testlog, true);
\r
99 WSTester tester = new WSTester(writer);
\r
100 writer.println("Attempting to connect to the service " + service
\r
101 + " on the server " + server + "...");
\r
102 JABAService ws = Jws2Client.connect(server, service);
\r
103 writer.println("Connected successfully!");
\r
105 boolean succeed = tester.checkService(ws);
\r
107 // TODO extract messages (see WSTester main)
\r
108 writer.println("Check is completed. The Service "
\r
109 + service.toString() + " IS WORKING");
\r
110 operating.put(service, new Date());
\r
112 writer.println("Check is completed. The Service "
\r
113 + service.toString() + " HAS SOME PROBLEMS");
\r
118 return testlog.toString();
\r
121 public boolean isOperating(Services service) {
\r
123 return operating.containsKey(service);
\r