Glassfish中部署的Webapp无法写入文件

时间:2012-06-26 19:11:53

标签: java java-ee ubuntu permissions glassfish

我在Glassfish中运行的无状态EJB中有以下函数。它只是将一些数据写入文件。该函数的第一部分只是创建了文件所需的路径。第二部分实际上是写文件。

private boolean createFile(String companyName, String fileName, byte[] data)
{
    logger.log(Level.FINEST, "Creating file: {0} for company {1}", new Object[]{fileName, companyName});
    File companyFileDir = new File(LOCAL_FILE_DIR, companyName);
    if(companyFileDir.exists() == false)
    {
        boolean createFileDir = companyFileDir.mkdirs();
        if(createFileDir == false)
        {
            logger.log(Level.WARNING, "Could not create directory to place file in");
            return false;
        }
    }
    File newFile = new File(companyFileDir, fileName);
    try 
    {
        FileOutputStream fileWriter = new FileOutputStream(newFile);
        fileWriter.write(data);
    } 
    catch(IOException e)
    {
        logger.log(Level.SEVERE,"Could not write file to disk",e);
        return false;
    }
    logger.log(Level.FINEST,"File successfully written to file");
    return true;
}

执行此代码后得到的输出是:

WARNING: Could not create directory to place file in

显然,Glassfish无法创建此目录。我假设这与权限有关。任何人都可以给我一个方向来解决这里可能出现的问题吗?

我在Ubuntu 12上的Glassfish 3.12上运行它

1 个答案:

答案 0 :(得分:0)

不同的事情: 1)比较规范:(21.1.2编程限制) 企业bean不得使用java.io包来尝试访问文件系统中的文件和目录。 我确信GF没有强制执行此操作,但你应该知道这一点。

2)代码本身很好。尝试在LOCAL_FILE_DIR上使用chmod +777来了解它是否与一般权利有关...

希望有帮助...