我连接到 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 查询数据库时,国家字符将替换为"?"。
因此,有一种方法可以在 Jackcess 的 jdbc-url 上指定一个实用的"开场白":
......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 文件中。但是我是否需要从任何其他清单中引用它。其他罐子中的 INF 类路径或其他东西?
情况似乎是各种控制台不显示国家角色。这一点,以及我实际上必须指定在 ubuntu 命令行上运行的字符集的事实,让我相信存在问题,并且实际上在浏览器中而不是在日志记录控制台中显示数据表明了这一点。不需要特定字符集的顶点"开瓶器"。