【发布时间】:2010-11-28 20:46:10
【问题描述】:
本周末的某个时候,我们的一个数据库 (11.1.0.7) 开始在通过 Java 访问部分网络上的某些文件夹时遇到问题。我已经使用一小部分java重现了这个问题,除了创建一个文件对象并尝试删除文件之外什么都不做。来自 数据库这适用于删除本地文件和删除我们 \zion\dp\ 共享上的网络文件,但不能从我们的 \zion\it\ 共享中删除。
我们有另一个在同一域用户帐户下运行的数据库,从该位置删除文件没有问题。还以服务器上的同一域用户身份登录有问题我可以在 Oracle 之外运行 java 并且删除没有问题 文件。域用户对文件夹具有完全控制权,并以我可以创建、修改和删除文件的用户身份登录。
如果我没有授予我的 oracle 数据库用户适当的 dbms_java 权限,我会收到适当的 java.security.AccessControlException 错误。在我授予java运行完成的权限后,delete命令返回false(没有删除)并且文件没有被删除。
我向 Oracle 开了一个案例,但看起来它们不再有帮助,因为它涉及从 java 层运行的文件命令,即使它只能从 Oracle 环境中重现。
测试代码:
import java.io.*;
import java.sql.*;
import java.util.*;
public class Ajclass
{
public static void ajprocedure(String pdfFileName) throws Exception
{
boolean result;
try {
System.out.println("Start!");
File file = new File(pdfFileName);
//result = file.delete();
result = file.exists();
if (result == true)
System.out.println("xxFile deleted.");
else
System.out.println("xxFile NOT deleted!");
System.out.println("End!");
} catch ( Exception e ) {
throw(e);
}
}
}
我最近发现仅针对此共享且仅在从该数据库内部运行时才会失败的其他代码:
import java.io.*;
import java.sql.*;
public class DirectoryListing
{
public static void getList(String directory) throws SQLException
{
File path = new File( directory );
String[] list = path.list();
String element;
int CurrentFile;
for(CurrentFile = 0; CurrentFile < list.length; CurrentFile++)
{
element = list[CurrentFile];
#sql { INSERT INTO DIRECTORYLISTING (FILENAME) VALUES (:element) };
}
}
}
【问题讨论】:
-
删除只是一个测试。真正的处理将一个带有值的 pdf 和另一个 pdf 合并以写出一个新的 pdf。
标签: java oracle windows-server-2008 oracle11g