Значение переменной среды (NLS_LANG) изменено в процессе Java? - PullRequest
0 голосов
/ 16 марта 2010

Это было замечено в некоторых устаревших приложениях 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 кажется измененным?

Ответы [ 3 ]

1 голос
/ 16 марта 2010

Есть ли в системе триггеры входа? Очень часто в триггерах входа в систему устанавливается множество переменных среды (обычно NLS _ * _ FORMAT), чтобы не полагаться на конфигурацию среды для поведения системы.

SELECT * FROM DBA_TRIGGERS
 WHERE TRIGGERING_EVENT = 'LOGON';
0 голосов
/ 18 марта 2010

Поскольку NLS_LANG экспортируется родителем, я предполагаю, что он наследуется дочерним элементом. В этом случае вы ищете какой-то скрипт запуска, который запускается где-то, перезаписывая его с помощью american_america.UTF8. Я бы искал .cshrc (или похожий, в зависимости от того, что такое оболочка S2). Может быть в области пользователя или в глобальной области / etc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...