- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是一个大问题。
我有一个结构良好但单一的代码库,它有一个原始的模块化架构(所有模块实现接口(interface)但共享相同的类路径)。当我在应用程序服务器上进行部署时,我意识到这种方法的愚蠢以及它所代表的问题,这些应用程序服务器可能具有我的库的不同冲突版本。
我现在依赖大约 30 个 jar ,并且正在中途将它们捆绑在一起。现在我的一些模块很容易声明版本化的依赖关系,比如我的网络组件。它们在 JRE 和其他 BNDded 库中静态引用类,但我的 JDBC 相关组件通过 Class.forName(...) 实例化,并且可以使用任意数量的驱动程序之一。
我正在按服务区域将所有内容分解为 OSGi 包。
我希望我的代码仍然能够在没有 OSGi 的情况下通过带有我所有依赖项的单个 jar 文件使用,并且完全没有 OSGi(通过 JARJAR),并且还可以通过 OSGi 元数据和具有依赖项的粒度包实现模块化信息。
如何配置我的 bundle 以及我的代码,这样它就可以动态地利用任何驱动程序类路径和/或在 OSGi 中容器环境(Felix/Equinox/等)?
是否有运行时方法来检测我是否在跨容器(Felix/Equinox 等)兼容的 OSGi 容器中运行?
如果我在 OSGi 容器中,是否需要使用不同的类加载机制?
我是否需要将 OSGi 类导入到我的项目中才能通过我的数据库模块加载 at-bundle-time-unknown JDBC 驱动程序?
我还有第二种获取驱动程序的方法(通过 JNDI,它仅在应用服务器中运行时才真正适用),我是否需要为支持 OSGi 的应用服务器更改我的 JNDI 访问代码?
最佳答案
一个简单的示例片段:
public static boolean inOSGi() {
try {
Class.forName("org.osgi.framework.FrameworkUtil");
return true;
}
catch (ClassNotFoundException e) {
return false;
}
}
只要确保如果将这段代码放在一个包中,该包应该导入 org.osgi.framework(否则它将永远找不到那个类)。
关于java - JDBC/OSGi 以及如何动态加载驱动程序而无需在包中明确声明依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2707567/
我是一名优秀的程序员,十分优秀!