@Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, LogicException {
        String subcategory = request.getParameter(ParameterName.SUBCATEGORY);
        String category = request.getParameter(ParameterName.CATEGORY);
        PrintWriter out;
        try {
            out = response.getWriter();
     
            lock.readLock().lock();
            Source xmlSource = new StreamSource(PathName.PATH + PathName.XML_PRODUCTS);
            Transformer transformer;
            if (subcategory == null) {
                transformer = StylesheetCache.newTransformer(PathName.PATH + PathName.XSL_CATEGORY);
            } else {
                transformer = StylesheetCache.newTransformer(PathName.PATH + PathName.XSL_SUBCATEGORY);
                transformer.setParameter(ParameterName.NAME_CATEGORY, category);
            }
            transformer.transform(xmlSource, new StreamResult(out));
        } catch (Exception e) {
            throw new LogicException(e);
        } finally {
            lock.readLock().unlock();
        }
        return null;
    }