У меня есть соединение с базой данных 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, национальные символы заменяются на «?».Открыть базу данных ucanaccess/jackcess в wildfly с использованием iso-8859-1
Итак, есть способ указать praticular "нож" на JDBC-URL для 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 и т. Д.), Воссоздал драйвер и соединение, теперь с параметром openener и повторно использовал войну, используя ее. Но 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-файле. Но нужно ли мне ссылаться на него из любого другого пути класса MANIFEST.INF в других баночках или что-то еще?
Задание ISO-8859-1 в качестве набора символов не обязательно. Доступ хранит текст как Юникод уже много лет. Если вы открываете базу данных в самом доступе, текст отображается правильно? Если да, то какая версия Access это? –
Это Access 2000, символы отображаются корректно в Access и в командной строке UCanAccess, запущенной с jvm-option -Dfile.encoding = ISO-8859 на Ubuntu. В OS X эта опция для командной строки UCanAccess не требуется. Экземпляр Wildfly, который я использую сейчас, работает на OS X и не отображает национальные символы правильно. –
* «Экземпляр Wildlfy также работает на OS X и не отображает правильные национальные символы (в настоящее время они просто написаны на консоль в простой тесте)» * - Возможно, консоль OS X просто вводит вас в заблуждение, отображая некоторые Unicode символы как '?'. Я видел приглашение командной строки Windows. Если это так, вы должны просто получить текст в виде Юникода и убедиться, что ваше приложение правильно обрабатывает символы Юникода. –