2011-07-17 2 views
1

클라이언트가 업데이트를 요청할 때마다 내 web-apps 폴더의 xml 파일을 업데이트해야하는 서블릿을 작성하려고합니다. 하지만이 파일은 일반적인 리소스이므로 mvn : jetty 서버에서 다음 erron을 얻습니다. 사용자 매핑 섹션이 열려있는 파일에서 요청 된 작업을 수행 할 수 없으므로 기본적으로 파일을 찾을 수 없다는 Transformer 예외가 발생합니다. 나는 이것이 스레드 안전을 보장하기 위해 Windows 시스템 메시지라고 생각합니다.변압기 예외가없는 일반 XML 파일 리소스에 서블릿 쓰기를 동기화하는 방법

javax.xml.transform.TransformerException: java.io.FileNotFoundException: C:\User 
s\Anubhav\workspace2\blogping-dist (eng)\dreamapp\src\main\webapp\xyz.xml (T 
he requested operation cannot be performed on a file with a user-mapped section      
open) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutpu 
tHandler(TransformerImpl.java:489) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor 
m(TransformerImpl.java:298) 

액세스 권한을 동기화하는 데 유용한 제안 사항이 있으십니까?

나는 변압기의 병목 현상을 찾아 보았지만 그다지 많은 것을 발견하지 못했습니다.

감사

답변

3
  • 이 파일 (fileOutputStream.close())
  • 동기화 쓰기에 스트림을 종료해야합니다. 사용 synchronized(lockObject) 또는 lock.lock()

나는 일반적인 파일에 쓰기가 각 요청에 필요한 경우 응용 프로그램의 디자인이 좋은 경우에 의문을 제기한다. 이것은 잠재적 인 병목 현상이므로 피해야합니다. 예를 들어 파일 대신 트랜잭션 데이터베이스를 고려하십시오.

+0

+1 HTTP 요청을 병렬로 처리하지 않고 연속적으로 진행하도록하는 것은 5 명의 사용자 만있는 경우가 아니면 재앙을 대비하는 방법입니다. –

+0

참으로. 이것이 모든 요청에 ​​대해 발생하지 않는다면 괜찮을 수도 있습니다. 하지만 그렇지 않으면 트랜잭션 데이터베이스가 고려되어야합니다 – Bozho

+0

감사합니다 Bozho. 하지만 요청 된 변경 사항을 반영하는 클라이언트 프로그램에 액세스 할 수 있어야하는 xml 파일을 업데이트해야합니다. 그리고이 XML 파일은 그것을보고 싶어하는 모든 클라이언트에게 공통적입니다. 나는 [http://serghei.net/docs/programming/java/devel%20java%20enterprise%20apps/ch07/07-12.html]을 시도했다. 그러나 아직도 doesnt 일. – bohav

관련 문제