我在eclipse RCP应用程序中使用H2包。它使用如下java实现:
create alias MY_FUNCTION for "com.fun.MyFunctions.myFunction";
其中,MyFunctions是公共类,myFunction是公共静态方法。
它适用于H2版本1.3.170或更高版本,因为清单中有以下声明。MF:
DynamicImport-Package: *
新的H2版本不再有这个声明,因此我得到了ClassNotFound异常。
在H2的git日志中,我找到了以下注释(对于commit removing DynamicImport):
改进的OSGi支持。H2现在注册为DataSourceFactory 服务修复了问题365。
文档不是很有用: http://www.h2database.com/html/tutorial.html#osgi
你知道我现在如何添加依赖关系吗?
H2移动到使用 DataSourceFactory 因为这是获得 Driver 或 DataSource .实际上与 DynamicImport-Package: * 通配符动态导入的使用可能是专门为解决您的用例而添加的,但它从根本上讲是一种非常糟糕的模块化实践,可能会导致各种问题。例如,在删除捆绑包后,无法阻止H2尝试加载函数。
DataSourceFactory
Driver
DataSource
假设函数不太复杂,最好将其注册为Java源代码。对此进行了解释 in the H2 docs 也不太复杂。实际上,您可以注册别名,但Java源代码以美元符号标记:
CREATE ALIAS MY_FUNCTION AS $$ String myFunction(String arg) { // Your implementation goes in here return arg; } $$;