如何避免java库

时间:2016-07-22 18:01:14

标签: java classloader

我们有一个可以用来构建JDBC驱动程序的java库(更像是一个框架)。该框架实现了JDBC接口,您实现了框架使用的一些接口来实现驱动程序。

出现的一个问题是,如果使用此框架创建两个驱动程序,并尝试在单个JVM中同时使用它们,则只会加载一组框架类。

这至少有两个原因:

  1. 框架包含单例,因此只加载第一个驱动程序 实际上工作正常。
  2. 即使我们删除了所有单身人士的事情 如果加载了框架的“错误版本”,可能会破坏 其中一个驱动程序的运行时。
  3. 使用的解决方案是为每个驱动程序重命名框架类包,以便它们不再发生冲突。虽然这很有效,但是在我们测试之后会发生对字节码操作的担忧。

    我的问题:有更好的方法吗?这需要从我们这边处理,而不是应用程序,因为应用程序仅将驱动程序用作JDBC驱动程序,因此它需要是透明的。

    我的一个想法是将驱动程序的所有类(除了实现Driver / DataSource的'entrypoint'类)序列化为某种资源,该资源打包在驱动程序jar中(使用资源的FQN和入口点类对于驱动程序是唯一的,然后在静态初始化块中具有入口点类,读出类并使用私有类加载器加载它们。这种方法是否有任何明显的问题?

0 个答案:

没有答案