Это было замечено в некоторых устаревших приложениях Java (jre1.4 в HP-UX).
Родительский процесс (сценарий оболочки S1) запускает процесс Java, который сам по себе запускает дочерний процесс (сценарий оболочки S2). Схематично это: S1> Java> S2 .
NB! Приложение Java подключается к базе данных Oracle с помощью драйвера OCI.
Что странно, так это то, что процесс, выполняющий S1, имеет переменную окружения NLS_LANG
, установленную в american_america.BLT8MSWIN1257
, Java порождает S2, используя:
Runtime.getRuntime().exec(cmd);
и S2 показывает, что NLS_LANG
установлено на american_america.UTF8
(!)
Это происходит в какой-то среде с ограниченным доступом (производственной), я не смог воспроизвести ту же проблему на linux с jre 1.5.
AFAIK, Java-процесс должен наследовать окружение от своего parrent (S1) и передавать все переменные окружения своему дочернему S2 (поскольку использовался единственный аргумент exec
call). Однако, похоже, это не так. Есть идеи, почему NLS_LANG
кажется измененным?