Откройте базу данных 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, привели меня к мысли, что возникла проблема, и фактическое отображение данных в браузере, а не в консоли журналирования, показало именно это. Не требуется домкрат "открывашка" для определенного набора символов.

Другие вопросы по тегам