从DB调用类(已编译的java文件)文件,并在应用程序服务器上的运行时执行它

时间:2014-01-31 11:12:17

标签: java oracle java-ee jdbc oracle11g

我要求客户端希望将.class文件保留为Blob数据库oracle 11g(因为.class具有财务批处理和加密的逻辑,客户端不想把它放在应用服务器上。)

我的问题是

是否可以在应用程序中使用这样的功能从DB中检索.class文件(已编译的java文件)并在调用时执行它?

提前致谢。

1 个答案:

答案 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读入数组并返回。