这在一些遗留Java应用程序(HP-UX上的jre1.4)中已被注意到。在Java进程中更改了环境变量(NLS_LANG)值?
父进程(shell脚本S1)正在启动Java进程,它自己启动子进程(shell脚本S2)。示意图如下:S1> Java> S2。
注意! Java应用程序使用OCI驱动程序连接到Oracle DB。
什么是这里的怪是运行S1这一过程有环境变量NLS_LANG
设置为american_america.BLT8MSWIN1257
,Java的滋生S2使用:
Runtime.getRuntime().exec(cmd);
和S2显示NLS_LANG
设置为american_america.UTF8
这发生在一些有限的访问环境(生产)上,我无法在jre 1.5上重现与linux相同的问题。 AFAIK,Java进程应该从其父节点(S1)继承环境,并且应该将所有环境变量传递给其子节点S2(因为使用了单参数exec
调用)。但是,似乎并非如此。任何想法为什么NLS_LANG
似乎被改变?
恐怕我目前无法检查这个选择,但是您能否解释一下如何使用数据库触发器更改某个Unix进程的环境? – Ralkie 2010-03-17 08:35:14
如果我不清楚,我很抱歉; Unix环境变量未被修改,但NLS_LANG参数可以在Oracle会话的上下文中修改。它可以从调用进程继承,在所有情况下由客户端设置,或由数据库触发器覆盖。 – 2010-03-17 13:51:41