Откройте базу данных ucanaccess/jackcess у wildfly, используя iso-8859-1
У меня есть подключение к базе данных MS Access 2000, определенной в wildfly 9.0.2. Работает отлично. Используя командную строку UCanAccess, я запускаю его с -Dfile.encoding=ISO-8859
чтобы правильно отображать национальные символы (норвежский) в Ubuntu. В OS X командная строка правильно отображает национальные символы без каких-либо опций jre. Однако экземпляр Wildlfy также работает в OS X и не отображает правильные национальные символы (в настоящее время они просто записываются на консоль в простом тесте). Использование UcanAccess-драйвера в любом основанном на Java клиенте SQL, таком как DBeaver или SQLSquirrel, "просто работает "когда дело доходит до набора символов. Однако, запрашивая базу данных через JPA и wildfly, национальные символы заменяются на "?".
Итак, есть способ указать на jdbc-url специфичный "opener" для Jackcess:
......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, и повторно использовал war-файл, используя его. Но Wildfly жалуется:
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-файле. Но нужно ли ссылаться на него из какого-либо другого пути к классам MANIFEST.INF в других банках или как-то еще?
1 ответ
Дело в том, что на разных консолях не отображаются национальные символы. Это и тот факт, что мне действительно нужно указать кодировку, выполняемую в командной строке ubuntu, привели меня к мысли, что возникла проблема, и фактическое отображение данных в браузере, а не в консоли журналирования, показало именно это. Не требуется домкрат "открывашка" для определенного набора символов.