我要求客户端希望将.class
文件保留为Blob
数据库oracle 11g
(因为.class
具有财务批处理和加密的逻辑,客户端不想把它放在应用服务器上。)
我的问题是
是否可以在应用程序中使用这样的功能从DB中检索.class文件(已编译的java文件)并在调用时执行它?
提前致谢。
答案 0 :(得分:1)
是的,您需要编写一个自定义java.lang.ClassLoader,它使用从数据库中读取的字节来定义类。
它看起来像这样:
public class DatabaseClassLoader extends ClassLoader
{
private DataSource dataSource;
public DatabaseClassLoader(ClassLoader parent, DataSource dataSource)
{
super(parent);
this.dataSource = dataSource;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException
{
byte[] classDefinition = loadClassDefinition(name);
if (classDefinition != null)
{
Class c = defineClass(name, classDefinition, 0, classDefinition.length);
resolveClass(c);
return c;
}
else
{
return super.loadClass(name);
}
}
private byte[] loadClassDefinition(String name)
{
...
}
}
loadClassDefinition
尝试使用名称作为SQL查询中的键来加载表示类的字节 - 你必须自己定义它是如何做的,但大纲是,查询表,将blob读入数组并返回。