0
클러스터에서 여러 저장소를 실행하는 데 문제가있는 jackrabbit 서버로 작업하고 있습니다. 문제는 파일 삽입을위한 폴더 구조 경로가 두 번째 서버에 첫 번째 저장소와 파일 삽입시에 (두 서버가 동기화되기 전에) 발생한다는 것입니다. 내가 이것을 위해 고안된 해결책은 Jackrabbit 소스 코드를 변경하고 409 CONFLICT 오류를 다시 던지는 대신 폴더 경로가 존재하는 경우 파일 경로를 생성하는 것입니다. 다음은 JackRabbit 웹 -DebJackRabbit의 노드가 Jackrabbit AbstractWebDavServlet에 있는지 확인하십시오.
의 AbstractWebDavServlet에서 변경된 내용입니다protected void doPut(WebdavRequest request, WebdavResponse response,
DavResource resource) throws IOException, DavException {
DavResource parentResource = resource.getCollection();
if (parentResource == null || !parentResource.exists()) {
if(!parentResource.exists()) {
try {
createFolder((Session)request.getSession(), parentResource.getLocator().getPrefix(),parentResource.getLocator().getHref(true));
}catch(Exception e) {
throw new IOException();
}
}
// parent does not exist
response.sendError(DavServletResponse.SC_CONFLICT);
return;
}
int status;
// test if resource already exists
if (resource.exists()) {
status = DavServletResponse.SC_NO_CONTENT;
} else {
status = DavServletResponse.SC_CREATED;
}
parentResource.addMember(resource, getInputContext(request, request.getInputStream()));
response.setStatus(status);
}
private String[] getFolders(String desUrl) throws Exception {
if (null == desUrl || desUrl.length() == 0)
return null;
String[] folder = desUrl.split("/");
String[] folders = new String[folder.length];
for (int i = 0; i < folder.length; i++) {
if (i == 0)
folders[i] = folder[i];
else
folders[i] = folders[i - 1] + "/" + folder[i];
}
return folders;
}
public void createFolder(Session session123,String prefix,String href) throws Exception {
String[] folders = /*this.getFolders(href.substring(prefix.length(),href.length()))*/href.substring(prefix.length()+1,href.length()-1).split("/");
if (null != folders) {
String davFolder = "";
int length = folders.length;
//Session session123 = ((JcrDavSession)session).getRepositorySession();
Node rootNode=session123.getRootNode();
for (int i = 0; i < length; i++) {
if(!rootNode.hasNode(folders[i]))
IOUtil.mkDirs(rootNode, folders[i], NodeType.NT_UNSTRUCTURED);
else
rootNode.getNode(folders[i]);
}
}
}
있습니다 .. JCR 세션 dosent 작업을 얻기위한 방법 위의 session.The을 얻을 수있는 방법을 알아 내려고 악몽 상황에서 지금 메신저
.
당신은 rootNode.getSession를 사용할 수 없습니다()? – TedTrippin