저는 struts 및 xslt 변형을 사용하는 간단한 웹 응용 프로그램을 보유하고 있습니다. 액션 클래스에서 올바른 데이터를 얻으면 메서드 "save"를 호출하려고 시도합니다.읽기 및 쓰기 잠금
public ActionForward saveProduct(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws XMLProductDAOException {
// Validation
if (sizeValidationErrorList == 0) {
try {
writeLock.lock();
productDAO.saveProducts(document, product, categoryId, subcategoryId);
} finally {
writeLock.unlock();
}
}
...
}
하지만 질문이 하나 있습니다. 우리 선생님은 lock-s를위한 가장 좋은 장소는 액션 클래스 또는 명령입니다 (간단한 웹 앱의 경우)
하지만 saveProducts 메서드에서는 XML 파일에 새 데이터를 작성하기 전에 변환을 수행합니다. 그것은 action-class에서 단지 writeLock을 사용하면 올바른 데이터를 읽는 것에 대한 통제력을 상실한다는 것을 의미합니다.
는 나는이public void saveProducts(Document document, Product product, Integer categoryId, Integer subcategoryId) throws XMLProductDAOException {
// /......
XSLTTransformer xsltTransformer = XSLTTransformer.getInstance();
Transformer transformer = xsltTransformer.getCachedTransformer(NEW_PRODUCT_REAL_XSL_PATH);
transformer.setParameter(PARAM_CURRENT_CATEGORY, currentCategory);
transformer.setParameter(PARAM_CURRENT_SUBCATEGORY, currentSubcategory);
transformer.setParameter(PARAM_PRODUCT, product);
Writer result = new StringWriter();
xsltTransformer.transform(transformer, result);
File originalXML = new File(PRODUCT_REAL_XML_PATH);
Writer fileWriter = null;
try {
fileWriter = new PrintWriter(originalXML, ENCODING);
fileWriter.write(result.toString());
} catch (IOException e) {
logger.error(IO_EXCEPTION, e);
throw new XMLProductDAOException(IO_EXCEPTION, e);
} finally {
fileWriter.close();
}
// /.....
}
같은 떨어지게가 나는 액션 클래스에 단지 writeLock를를 사용하면 XML에 잘못된 데이터가 기록에 직면받을 수 있습니다 XMLProductDAO?
왜 자물쇠가 필요한지 불분명합니다. 너는 무엇을 막으려 고하는거야? –
''action-class에서 writeLock 만 사용하면 올바른 데이터를 읽지 못하게됩니다. '라는 의미는 무엇입니까? 쓰기 잠금에는 정의에 의한 읽기 잠금 (sorta)이 포함됩니다. 쓰기 잠금 기능이 있으면 보호 할 데이터를 읽거나 쓸 수 있습니다. –
@JB Nizet xslt transforamtion을 사용하여 데이터를 추가하고 XML 파일의 내용을 덮어 쓰면 – Ray