You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2015/12/08 20:28:17 UTC
svn commit: r1718679 - in
/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws:
db/ db/DbMachine.java db/DbQuery.java db/IDbMachine.java
server/DuccHandlerClassic.java server/DuccHandlerJsonFormat.java
server/Helper.java
Author: degenaro
Date: Tue Dec 8 19:28:17 2015
New Revision: 1718679
URL: http://svn.apache.org/viewvc?rev=1718679&view=rev
Log:
UIMA-4704 DUCC Web Server (WS) Machine page support for Database query to determine up/down status
Added:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java (with props)
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java (with props)
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java (with props)
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java (with props)
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java?rev=1718679&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java Tue Dec 8 19:28:17 2015
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ws.db;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DbMachine implements IDbMachine{
+
+ private Map<String, Object> map = new HashMap<String, Object>();
+
+ private enum Key {
+ classes, // [weekly urgent background normal reserve JobDriver high debug low standalone fixed]
+ reservable, // [true]
+ share_order, // [2]
+ assignments, // [0]
+ blacklisted, // [false]
+ memory, // [30]
+ online, // [true]
+ ip, // [192.168.4.4]
+ heartbeats, // [0]
+ nodepool, // [--default--]
+ shares_left, // [2]
+ quantum, // [15]
+ name, // [bluejws67-4]
+ responsive, // [true]
+ };
+
+ public DbMachine(Map<String, Object> map) {
+ initMap(map);
+ }
+
+ private void initMap(Map<String, Object> value) {
+ if(value != null) {
+ map.putAll(value);
+ }
+ }
+
+ public List<String> getClasses() {
+ List<String> retVal = new ArrayList<String>();
+ String classes = (String) map.get(Key.classes.name());
+ if(classes != null) {
+ String[] array = classes.split("\\s+");
+ if(array != null) {
+ retVal = Arrays.asList(array);
+ }
+ }
+ return retVal;
+ }
+
+ public Boolean getReservable() {
+ Boolean retVal = (Boolean) map.get(Key.reservable.name());
+ return retVal;
+ }
+
+ public Integer getShareOrder() {
+ Integer retVal = (Integer) map.get(Key.share_order.name());
+ return retVal;
+ }
+
+ public Integer getAssignments() {
+ Integer retVal = (Integer) map.get(Key.assignments.name());
+ return retVal;
+ }
+
+ public Boolean getBlacklisted() {
+ Boolean retVal = (Boolean) map.get(Key.blacklisted.name());
+ return retVal;
+ }
+
+ public Integer getMemory() {
+ Integer retVal = (Integer) map.get(Key.memory.name());
+ return retVal;
+ }
+
+ public Boolean getOnline() {
+ Boolean retVal = (Boolean) map.get(Key.online.name());
+ return retVal;
+ }
+
+ public String getIp() {
+ String retVal = (String) map.get(Key.ip.name());
+ return retVal;
+ }
+
+ public Integer getHeartbeats() {
+ Integer retVal = (Integer) map.get(Key.heartbeats.name());
+ return retVal;
+ }
+
+ public String getNodePool() {
+ String retVal = (String) map.get(Key.nodepool.name());
+ return retVal;
+ }
+
+ public Integer getSharesLeft() {
+ Integer retVal = (Integer) map.get(Key.shares_left.name());
+ return retVal;
+ }
+
+ public Integer getQuantum() {
+ Integer retVal = (Integer) map.get(Key.quantum.name());
+ return retVal;
+ }
+
+ public String getName() {
+ String retVal = (String) map.get(Key.name.name());
+ return retVal;
+ }
+
+ public Boolean getResponsive() {
+ Boolean retVal = (Boolean) map.get(Key.responsive.name());
+ return retVal;
+ }
+
+}
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbMachine.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java?rev=1718679&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java Tue Dec 8 19:28:17 2015
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ws.db;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
+import org.apache.uima.ducc.common.persistence.rm.RmPersistenceFactory;
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
+import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
+import org.apache.uima.ducc.common.utils.IDuccLoggerComponents;
+import org.apache.uima.ducc.common.utils.id.DuccId;
+
+public class DbQuery {
+
+ private static DuccLogger logger = DuccLoggerComponents.getWsLogger(DbQuery.class.getName());
+ private static DuccId jobid = null;
+
+ private static DbQuery instance = null;
+
+ private static boolean enabled = true;
+
+ private IRmPersistence persistence = null;
+
+ private static String component = IDuccLoggerComponents.abbrv_webServer;
+
+ static {
+ synchronized(DbQuery.class) {
+ if(instance == null) {
+ instance = new DbQuery();
+ }
+ }
+ }
+
+ private DbQuery() {
+ DuccPropertiesResolver dpr = DuccPropertiesResolver.getInstance();
+ String value;
+ value = dpr.getProperty(DuccPropertiesResolver.ducc_database_host);
+ if(value != null) {
+ if(value.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
+ enabled = false;
+ }
+ }
+ persistence = RmPersistenceFactory.getInstance(this.getClass().getName(),component);
+ }
+
+ public static DbQuery getInstance() {
+ return instance;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public static void dumpMap(Map<String, IDbMachine> dbMachineMap) {
+ String location = "dumpMap";
+ if(dbMachineMap != null) {
+ if(!dbMachineMap.isEmpty()) {
+ for(Entry<String, IDbMachine> entry : dbMachineMap.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue().getIp();
+ logger.debug(location, jobid, "host="+key+" "+"ip="+value);
+ }
+ }
+ else {
+ logger.debug(location, jobid, "map is empty");
+ }
+ }
+ else {
+ logger.debug(location, jobid, "map is null");
+ }
+ }
+
+ public Map<String, IDbMachine> getMapMachines() {
+ String location = "getMapMachines";
+ Map<String, IDbMachine> retVal = new HashMap<String, IDbMachine>();
+ if(isEnabled()) {
+ try {
+ Map<String, Map<String, Object>> state = persistence.getAllMachines();
+ if(!state.isEmpty()) {
+ for ( String key : state.keySet() ) {
+ Map<String, Object> entry = state.get(key);
+ DbMachine value = new DbMachine(entry);
+ retVal.put(key, value);
+ }
+ }
+ else {
+ logger.info(location, jobid, "map is empty");
+ }
+ }
+ catch(Exception e) {
+ logger.error(location, jobid, e);
+ }
+ }
+ else {
+ logger.info(location, jobid, "enabled="+enabled);
+ }
+ dumpMap(retVal);
+ return retVal;
+ }
+
+ public void close() {
+ if(persistence != null) {
+ persistence.close();
+ }
+ }
+}
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java?rev=1718679&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java Tue Dec 8 19:28:17 2015
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ws.db;
+
+public interface IDbMachine {
+ public Boolean getReservable();
+ public Integer getShareOrder();
+ public Integer getAssignments();
+ public Boolean getBlacklisted();
+ public Integer getMemory();
+ public Boolean getOnline();
+ public String getIp();
+ public Integer getHeartbeats();
+ public String getNodePool();
+ public Integer getSharesLeft();
+ public Integer getQuantum();
+ public String getName();
+ public Boolean getResponsive();
+}
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/IDbMachine.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java?rev=1718679&r1=1718678&r2=1718679&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java Tue Dec 8 19:28:17 2015
@@ -72,10 +72,12 @@ import org.apache.uima.ducc.ws.DuccMachi
import org.apache.uima.ducc.ws.Info;
import org.apache.uima.ducc.ws.JobInfo;
import org.apache.uima.ducc.ws.MachineInfo;
+import org.apache.uima.ducc.ws.db.DbQuery;
+import org.apache.uima.ducc.ws.db.IDbMachine;
import org.apache.uima.ducc.ws.helper.BrokerHelper;
+import org.apache.uima.ducc.ws.helper.BrokerHelper.FrameworkAttribute;
import org.apache.uima.ducc.ws.helper.DatabaseHelper;
import org.apache.uima.ducc.ws.helper.EntityInfo;
-import org.apache.uima.ducc.ws.helper.BrokerHelper.FrameworkAttribute;
import org.apache.uima.ducc.ws.registry.ServiceInterpreter.StartState;
import org.apache.uima.ducc.ws.registry.ServicesRegistry;
import org.apache.uima.ducc.ws.registry.sort.IServiceAdapter;
@@ -1605,6 +1607,8 @@ public class DuccHandlerClassic extends
StringBuffer row;
StringBuffer data = new StringBuffer();
+ Map<String, IDbMachine> dbMachineMap = DbQuery.getInstance().getMapMachines();
+
DuccMachinesData instance = DuccMachinesData.getInstance();
MachineFactsList factsList = instance.getMachineFactsList();
@@ -1682,14 +1686,16 @@ public class DuccHandlerClassic extends
row.append((trGet(counter)));
// Status
StringBuffer sb = new StringBuffer();
- String status = facts.status;
+ String[] machineStatus = Helper.getMachineStatus(facts, dbMachineMap);
+ String status = machineStatus[0];
+ hover = "title=\""+machineStatus[1]+"\"";
if(status.equals("down")) {
- sb.append("<span class=\"health_red\""+">");
+ sb.append("<span "+hover+" class=\"health_red\""+">");
sb.append(status);
sb.append("</span>");
}
else if(status.equals("up")) {
- sb.append("<span class=\"health_green\""+">");
+ sb.append("<span "+hover+"class=\"health_green\""+">");
sb.append(status);
sb.append("</span>");
}
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1718679&r1=1718678&r2=1718679&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Tue Dec 8 19:28:17 2015
@@ -77,6 +77,8 @@ import org.apache.uima.ducc.ws.Info;
import org.apache.uima.ducc.ws.JobInfo;
import org.apache.uima.ducc.ws.MachineInfo;
import org.apache.uima.ducc.ws.ReservationInfo;
+import org.apache.uima.ducc.ws.db.DbQuery;
+import org.apache.uima.ducc.ws.db.IDbMachine;
import org.apache.uima.ducc.ws.helper.BrokerHelper;
import org.apache.uima.ducc.ws.helper.DatabaseHelper;
import org.apache.uima.ducc.ws.helper.EntityInfo;
@@ -1324,6 +1326,8 @@ public class DuccHandlerJsonFormat exten
JsonArray row;
StringBuffer sb;
+ Map<String, IDbMachine> dbMachineMap = DbQuery.getInstance().getMapMachines();
+
DuccMachinesData instance = DuccMachinesData.getInstance();
MachineFactsList factsList = instance.getMachineFactsList();
@@ -1379,14 +1383,16 @@ public class DuccHandlerJsonFormat exten
row = new JsonArray();
// Status
sb = new StringBuffer();
- String status = facts.status;
+ String[] machineStatus = Helper.getMachineStatus(facts, dbMachineMap);
+ String status = machineStatus[0];
+ hover = "title=\""+machineStatus[1]+"\"";
if(status.equals("down")) {
- sb.append("<span class=\"health_red\""+">");
+ sb.append("<span "+hover+" class=\"health_red\""+">");
sb.append(status);
sb.append("</span>");
}
else if(status.equals("up")) {
- sb.append("<span class=\"health_green\""+">");
+ sb.append("<span "+hover+"class=\"health_green\""+">");
sb.append(status);
sb.append("</span>");
}
@@ -2054,10 +2060,14 @@ public class DuccHandlerJsonFormat exten
duccLogger.trace(methodName, jobid, messages.fetch("enter"));
StringBuffer sb = new StringBuffer();
+ Map<String, IDbMachine> dbMachineMap = DbQuery.getInstance().getMapMachines();
+
DuccMachinesData instance = DuccMachinesData.getInstance();
MachineFactsList factsList = instance.getMachineFactsList();
+ Helper.updateMachineStatus(factsList, dbMachineMap);
+
Gson gson = new Gson();
String jSon = gson.toJson(factsList);
sb.append(jSon);
Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java?rev=1718679&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java Tue Dec 8 19:28:17 2015
@@ -0,0 +1,93 @@
+package org.apache.uima.ducc.ws.server;
+
+import java.util.Map;
+
+import org.apache.uima.ducc.cli.ws.json.MachineFacts;
+import org.apache.uima.ducc.cli.ws.json.MachineFactsList;
+import org.apache.uima.ducc.ws.db.IDbMachine;
+
+public class Helper {
+
+ // up: responsive == true && online == true && blacklisted == false
+
+ public enum MachineStatus { up, down, unknown };
+
+ private static String[] getMachineStatusWs(MachineFacts facts, Map<String, IDbMachine> dbMachineMap) {
+ String[] retVal = null;
+ if(facts != null) {
+ if(facts.status != null) {
+ if(facts.status.equals("up")) {
+ retVal = new String[2];
+ retVal[0] = facts.status;
+ retVal[1] = "";
+ }
+ else if(facts.status.equals("down")) {
+ retVal = new String[2];
+ retVal[0] = facts.status;
+ retVal[1] = "heartbeat=missing";
+ }
+ }
+ }
+ return retVal;
+ }
+
+ private static String[] getMachineStatusDb(MachineFacts facts, Map<String, IDbMachine> dbMachineMap) {
+ String[] retVal = null;
+ if(facts != null) {
+ if(facts.status != null) {
+ if(dbMachineMap != null) {
+ IDbMachine dbMachine = dbMachineMap.get(facts.name);
+ if(dbMachine != null) {
+ Boolean responsive = dbMachine.getResponsive();
+ Boolean online = dbMachine.getOnline();
+ Boolean blacklisted = dbMachine.getBlacklisted();
+ StringBuffer sb = new StringBuffer();
+ sb.append("responsive="+responsive);
+ sb.append(" ");
+ sb.append("online="+online);
+ sb.append(" ");
+ sb.append("blacklisted="+blacklisted);
+ retVal = new String[2];
+ retVal[0] = MachineStatus.down.name();
+ retVal[1] = sb.toString();
+ if(responsive) {
+ if(online) {
+ if(!blacklisted) {
+ retVal[0] = MachineStatus.up.name();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return retVal;
+ }
+
+ public static String[] getMachineStatus(MachineFacts facts, Map<String, IDbMachine> dbMachineMap) {
+ String[] retVal = null;
+ if(retVal == null) {
+ retVal = getMachineStatusDb(facts, dbMachineMap);
+ }
+ if(retVal == null) {
+ retVal = getMachineStatusWs(facts, dbMachineMap);
+ }
+ if(retVal == null) {
+ retVal = new String[2];
+ retVal[0] = facts.status;
+ retVal[1] = "";
+ }
+ return retVal;
+ }
+
+ public static void updateMachineStatus(MachineFactsList factsList, Map<String, IDbMachine> dbMachineMap) {
+ if(factsList!= null) {
+ if(dbMachineMap != null) {
+ for(MachineFacts facts : factsList) {
+ String[] machineStatus = getMachineStatus(facts, dbMachineMap);
+ facts.status = machineStatus[0];
+ }
+ }
+ }
+ }
+}
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain