1

Glassfishで実行されているステートレスEJB内に次の関数があります。ファイルにデータを書き込むだけです。関数の最初の部分は、ファイルの移動先へのパスを作成するだけです。2番目の部分は実際にファイルを書き込みます。

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はこのディレクトリを作成できません。これはパーミッションと関係があると思います。誰かが私にここで何が間違っているのかについて行く方向を教えてもらえますか?

Ubuntu12のGlassfish3.12でこれを実行しています

4

1 に答える 1

0

異なる点: 1) 仕様の比較: (21.1.2 プログラミングの制限) エンタープライズ Bean は、java.io パッケージを使用して、ファイル システム内のファイルおよびディレクトリにアクセスしようとしてはなりません。GFがこれを強制していないと確信していますが、そのことに注意する必要があります.

2) コード自体は問題ありません。LOCAL_FILE_DIR で chmod +777 を試して、一般的な権利と関係があるかどうかを判断してください...

それが役立つことを願っています...

于 2012-06-29T10:21:38.643 に答える