【发布时间】:2016-12-05 22:17:57
【问题描述】:
我有一个 PL/SQL 文件,其中包含一个仅包含 Java 代码的过程。
以下是Java代码开始前的声明:
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "fnd_log_file_handler" AS
此 Java 代码执行各种文件操作(复制、检查长度、遍历文件数组、检查文件对象是否为目录等)和 DOM 操作/XML 解析(从给定的 XML 字符串创建 XML 文档对象)。此外,它还使用返回 Process 对象的 Runtime.exec() java 方法调用外部命令。以下是导入的包:
import java.nio.channels.FileChannel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
还有一种方法被重复调用。它返回与特定名称模式匹配的文件夹中的文件列表。它使用 Comparator 过滤结果。以下是代码摘录
/**
* This API returns list of files in a folder matching particular name pattern.
* @param path - Path to the directory to get list of files
* @param pattern - Pattern for file names to look for. All files with name
* starting with this pattern will be returned from the API
* @return - Sorted list of files.
*/
private static File[ ] listFilesInOrder (String path, String pattern,
Comparator <File> compareFunc)
{
BASEFILENAME = pattern;
File lFile = new File (path);
File[] arrayFileList = lFile.listFiles(new FilenameFilter() {
public boolean accept(File f, String s) { return s.startsWith(BASEFILENAME + INDEX_SPERATOR); }
});
if(arrayFileList!=null)
{
Arrays.sort(arrayFileList, compareFunc);
}
return arrayFileList;
}
我希望删除 java 依赖项,以防 JVM 将来从数据库中删除。是否可以编写 PL/SQL 代码来包含所有这些逻辑?如果没有,我的其他选择是什么?任何反馈表示赞赏。
【问题讨论】:
-
万一JVM将来从数据库中删除?
-
@Kayaman Java 是 Oracle 数据库中的一个可选组件,不幸的是,DBA 删除它并不常见。这很愚蠢,但它确实发生了,因此明智的做法是尽可能避免 Java 依赖。
-
@JonHeller 是否有解决这种情况的方法?此代码是否仍可以作为可以从数据库中调用的独立 Java 文件存在?我不确定在 PL/SQL 中翻译所有这些逻辑是否可行。