Alfresco 内容服务返回旧内容一段时间

Alfresco 内容服务返回旧内容一段时间,alfresco,Alfresco,我使用以下代码段保存内容: private void writeToFile(NodeRef nodeRef, String content) throws IOException { ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); InputStream contentStream = new ByteArrayInputStream(conte

我使用以下代码段保存内容:

private void writeToFile(NodeRef nodeRef, String content) throws IOException {
    ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
    InputStream contentStream = new ByteArrayInputStream(content.getBytes(encoding));

    writer.setMimetype(mimeType);
    writer.setEncoding(encoding);
    writer.putContent(contentStream);

    Map<QName, Serializable> repoProps = nodeService.getProperties(nodeRef);

    ContentData contentData = (ContentData) repoProps.get(ContentModel.PROP_CONTENT);
    if(contentData == null)
        contentData = writer.getContentData();

    contentData = ContentData.setEncoding(contentData, encoding);
    contentData = ContentData.setMimetype(contentData, mimeType);
    repoProps.put(ContentModel.PROP_CONTENT, contentData);

    contentStream.close();

    nodeService.setProperties(nodeRef, repoProps);
}
private void writeToFile(NodeRef NodeRef,String content)引发IOException{
ContentWriter=contentService.getWriter(nodeRef,ContentModel.PROP\u CONTENT,true);
InputStream contentStream=new ByteArrayInputStream(content.getBytes(encoding));
writer.setMimetype(mimeType);
writer.setEncoding(编码);
writer.putContent(contentStream);
Map repoProps=nodeService.getProperties(nodeRef);
ContentData ContentData=(ContentData)repoProps.get(ContentModel.PROP\u CONTENT);
if(contentData==null)
contentData=writer.getContentData();
contentData=contentData.setEncoding(contentData,encoding);
contentData=contentData.setMimetype(contentData,mimeType);
repoProps.put(ContentModel.PROP\u CONTENT,contentData);
contentStream.close();
setProperties(nodeRef、repoProps);
}
当我在其他地方的短时间内(取决于服务器负载)阅读以这种方式编写的内容时,旧内容将被返回。所以看起来索引可能正在进行中,所以在返回最终提交旧内容之前,这可能吗?如果是,是否可以覆盖此行为并访问最新的内容?通过contentUrl

为了避免这种行为,我对每个读取请求使用线程,它在开始时会休眠一段时间,但我真的不喜欢这种“解决方案”

编辑:我从最新的SVN源代码构建,在Linux(CentOS和Ubuntu)上的Tomcat6.0.35上运行;系统加载-我的意思是每几秒钟就有数百个文件更改

编辑:阅读如下:

private byte[] readFileContent(NodeRef nodeRef) throws IOException {
    ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);

    if(reader == null)
        return null;

    InputStream originalInputStream = reader.getContentInputStream();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    final int BUF_SIZE = 1 << 8; // 1KiB buffer
    byte[] buffer = new byte[BUF_SIZE];
    int bytesRead = -1;

    while ((bytesRead = originalInputStream.read(buffer)) > -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

    originalInputStream.close();

    return outputStream.toByteArray();
}
ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
InputStream contentStream = new ByteArrayInputStream(content.getBytes(encoding));

writer.setMimetype(mimeType);
writer.setEncoding(encoding);
writer.putContent(contentStream);

contentStream.close();
private byte[]readFileContent(NodeRef NodeRef)引发IOException{
ContentReader=contentService.getReader(nodeRef,ContentModel.PROP\u CONTENT);
如果(读卡器==null)
返回null;
InputStream originalInputStream=reader.getContentInputStream();
ByteArrayOutputStream outputStream=新建ByteArrayOutputStream();
最终整数(单位大小=1-1){
写入(缓冲区,0,字节读取);
}
originalInputStream.close();
返回outputStream.toByteArray();
}

好的,通过如下更简单的保存解决:

private byte[] readFileContent(NodeRef nodeRef) throws IOException {
    ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);

    if(reader == null)
        return null;

    InputStream originalInputStream = reader.getContentInputStream();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    final int BUF_SIZE = 1 << 8; // 1KiB buffer
    byte[] buffer = new byte[BUF_SIZE];
    int bytesRead = -1;

    while ((bytesRead = originalInputStream.read(buffer)) > -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

    originalInputStream.close();

    return outputStream.toByteArray();
}
ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
InputStream contentStream = new ByteArrayInputStream(content.getBytes(encoding));

writer.setMimetype(mimeType);
writer.setEncoding(encoding);
writer.putContent(contentStream);

contentStream.close();

由于某些内容编码问题,以前的保存已到位,因此测试将显示这是否有效。

好的,通过以下更简单的保存解决:

private byte[] readFileContent(NodeRef nodeRef) throws IOException {
    ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);

    if(reader == null)
        return null;

    InputStream originalInputStream = reader.getContentInputStream();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    final int BUF_SIZE = 1 << 8; // 1KiB buffer
    byte[] buffer = new byte[BUF_SIZE];
    int bytesRead = -1;

    while ((bytesRead = originalInputStream.read(buffer)) > -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

    originalInputStream.close();

    return outputStream.toByteArray();
}
ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
InputStream contentStream = new ByteArrayInputStream(content.getBytes(encoding));

writer.setMimetype(mimeType);
writer.setEncoding(encoding);
writer.putContent(contentStream);

contentStream.close();

由于某些内容编码问题,以前的保存已经到位,所以测试表明这是否有效。

这是什么版本的Alfresco?哦,我忘了,SVN的最新版本,在原始问题中添加了此信息这是什么版本的Alfresco?哦,我忘了,SVN的最新版本,在原始问题中添加了此信息