我与 Wildfly 9.0.2 中定义的 MS Access 2000 数据库建立了连接。工作正常。我使用命令行 UCanAccess 运行它,-Dfile.encoding=ISO-8859
以便在 Ubuntu 上正确显示国家字符(挪威语)。在 OS X 上,命令行正确显示国家字符,无需任何 jre 选项。然而,Wildlfy 实例也在 OS X 上运行,并且不能正确显示国家字符(目前它们只是在一个简单的测试中写入控制台)在任何基于 java 的 sql 客户端(如 DBeaver 或 SQLSquirrel)中使用 UcanAccess-driver “正常工作“说到字符集。但是,通过 JPA 和 wildfly 查询数据库,国家字符被替换为“?”。
所以,有一种方法可以在 jdbc-url 上为 Jackcess 指定一个实用的“opener”:
......mdb;jackcessOpener=ucaextension.JackcessWithCharsetISO88591Opener
“开瓶器”看起来像这样:
public class JackcessWithCharsetISO88591Opener implements JackcessOpenerInterface {
public Database open(File f, String pwd) throws IOException {
DatabaseBuilder db = new DatabaseBuilder(f);
db.setCharset(Charset.forName("ISO-8859-1"));
try {
db.setReadOnly(false);
return db.open();
} catch (IOException e) {
db.setReadOnly(true);
return db.open();
}
}
}
(是的,异常处理至少应该发出警告。)
所以我把它打包成一个 jar 文件(maven),去掉了 wildfly 中旧的连接、驱动和模块定义。然后我添加了这个 jar 文件以及 ucanaccess 模块的其他文件(ucanaccess 本身、hsqldb 等),重新创建了驱动程序和连接,现在使用 opener 参数,并使用它重新部署了战争。但是野蝇抱怨:
Caused by: java.lang.ClassNotFoundException: ucaextension.JackcessWithCharsetISO88591Opener from [Module "com.ucanaccess:main" from local module loader @1060b431 (finder: local module finder @612679d6 (roots: /Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules,/Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules/system/layers/base))]
很明显,url 参数已被拾取,但找不到该类,即使它与驱动程序的其他 jar 一起部署。该类实际上在 jar 文件中。但是我需要从其他 jar 中的任何其他 MANIFEST.INF 类路径中引用它吗?