2012-06-26 28 views
1

在Glassfish中运行的无状态EJB中有以下功能。它所做的只是将一些数据写入文件。该函数的第一部分只是创建文件需要到达的路径。第二部分实际上是写入文件。在Glassfish中部署的Webapp无法写入文件

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上Glassfish的3.12运行此12个

回答

0

不同的东西: 1)比较规范:(21.1.2编程限制) 企业bean不能使用java.io包来尝试访问文件系统中的文件和目录。 我相信GF没有强制执行此操作,但您应该意识到这一点。

2)代码本身很好。尝试在LOCAL_FILE_DIR chmod +777得到一个想法,如果它与一般的权利有关...

希望可以帮助...