我正在REST
上运行Tomcat
服务,并从Eclipse
运行客户服务。
我的程序在第二次运行时会一直停止。我在运行Tomcat
第一次调用Controller
时,没有问题,一切正常。在Controller
中执行完所有操作后,用户将重定向回JSP
页面。在JSP
页面上点击按钮后,再次运行下面显示的Controller
代码。
但是这次,程序在函数中停止:
getOrderDetails(id, order, service);
执行该行时:
String orderXML = service.path("rest").path("coffee").header("user", "customer-123").accept(MediaType.APPLICATION_XML_TYPE).get(String.class);
这一行调用REST
服务,该服务将与我的SQLite数据库交互,然后返回一些`XML。
我真的无法理解为什么它会在第二次尝试时停止!
对此的任何帮助都将非常感激!
谢谢!
Update 1:
如果它有任何意义,我发现当程序挂起时,我不仅需要退出Eclipse
并重新启动它,而且还需要重新启动服务器。否则,客户端程序将无法正常工作。
Update 2:
我只定义了一个ClientResponse,用于程序中的所有点。
Update 3:
我在每次请求后都使用ClientResponse.close()
。
NOTE: Code updated to reflect comment below
Controller:
static ClientConfig config = new DefaultClientConfig();
static Client client = Client.create(config);
static WebResource service = client.resource(getBaseURI());
ClientResponse clientResp;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get All Coffee Orders
clientResp = service.path("rest").path("coffee").header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);
String orderXML = clientResp.getEntity(String.class);
clientResp.close();
try {
Document document = loadXMLFromString(orderXML);
NodeList nodeList = document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element elem = (Element) node;
CoffeeOrder order = new CoffeeOrder();
// Set ID
String id = elem.getElementsByTagName("id").item(0).getChildNodes().item(0).getNodeValue();
order.setId(id);
// Get ALL Order Details
getOrderDetails(id, order);
// Get ALL Payment Details
getPaymentDetails(id, order);
// If order has not been cancelled, add to open orders
if (!order.getOrderStatus().equals("cancelled")){
openOrders.add(order);
// If order has been cancelled, add to cancelled orders.
} else {
cancelledOrders.add(order);
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp");
dispatcher.forward(request, response);
}
// Get all Order Details
private void getOrderDetails(String id, CoffeeOrder order){
// PROGRAM STOPS HERE ON SECOND RUN THROUGH
clientResp = service.path("rest").path("coffee").path(id).header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);
orderXML = clientResp.getEntity(String.class);
clientResp.close();
// Do Things here with XML
} catch (Exception e){
e.printStackTrace();
}
}
// Get all Payment Details
private void getPaymentDetails(String id, CoffeeOrder order){
clientResp = service.path("rest").path("payment").path(id).header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);
orderXML = clientResp.getEntity(String.class);
clientResp.close();
// Do Things here with XML
} catch (Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:0)
我终于意识到问题是什么......
它与在服务器端打开的多个数据库连接有关!这导致了这个问题,一旦我处理了问题,问题就解决了。
感谢您的帮助!