strutsとxslt変換を使用する単純なWebアプリがあります。アクションクラスでは、正しいデータを取得した場合、メソッド「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();
}
}
...
}
しかし、私は1つの質問があります。私の先生は、lock-sの最適な場所はアクションクラスまたはコマンド(単純なWebアプリの場合)であると言います
しかし、saveProductsメソッドでは、xmlファイルに新しいデータを書き込む前に変換を行います。これは、アクションクラスでwriteLockだけを使用すると、正しいデータの読み取りを制御できなくなることを意味します。
私はXMLProductDAO私はこのようなsmthを持っています
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に誤ったデータを書き込むことに直面する可能性はありますか?