Java 查看该节点是否存在于Jackrabbit中的Jackrabbit AbstractWebDavServlet中
我正在使用jackrabbit服务器,我们在集群中运行多个存储库时遇到了一个问题。 问题是,文件插入的文件夹结构路径有时发生在第一个repo上,在两台服务器同步之前,文件插入在第二个repo上。 我为此设计的解决方案是更改Jackrabbit源代码,并在文件夹路径不存在时为文件创建文件夹路径,而不是仅仅抛出409冲突错误 以下是JackRabbit web Dav中AbstractWebDavServlet的更改Java 查看该节点是否存在于Jackrabbit中的Jackrabbit AbstractWebDavServlet中,java,jackrabbit,jcr,content-repository,sardine,Java,Jackrabbit,Jcr,Content Repository,Sardine,我正在使用jackrabbit服务器,我们在集群中运行多个存储库时遇到了一个问题。 问题是,文件插入的文件夹结构路径有时发生在第一个repo上,在两台服务器同步之前,文件插入在第二个repo上。 我为此设计的解决方案是更改Jackrabbit源代码,并在文件夹路径不存在时为文件创建文件夹路径,而不是仅仅抛出409冲突错误 以下是JackRabbit web Dav中AbstractWebDavServlet的更改 protected void doPut(WebdavRequest re
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会话的方法是有效的
请帮助您是否尝试使用与doMkCol相同的技术:
你不能只使用rootNode.getSession吗?
parentResource.addMember(resource, getInputContext(request, null));