Java进程中的环境变量(NLS_LANG)值是否已更改?

时间:2010-03-16 16:21:57

标签: java oracle environment-variables

在一些遗留Java应用程序(HP-UX上的jre1.4)中注意到了这一点。

父进程(shell脚本S1)正在启动Java进程,它自己就是启动子进程(shell脚本S2)。示意性地是: S1> Java> S2 的。

NB! 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进程应该从其parrent(S1)继承环境,并且应该将所有环境变量传递给它的子S2(因为使用了单个参数exec调用)。但是,似乎并非如此。有什么想法NLS_LANG似乎被改变了吗?

3 个答案:

答案 0 :(得分:1)

系统中是否有任何登录触发器?在登录触发器中设置许多环境变量(通常是NLS _ * _ FORMAT)以使其不依赖于系统行为的环境配置是很常见的。

SELECT * FROM DBA_TRIGGERS
 WHERE TRIGGERING_EVENT = 'LOGON';

答案 1 :(得分:0)

答案 2 :(得分:0)

由于NLS_LANG由父级导出,我将假设它是由子级继承的。在这种情况下,你正在寻找一些启动脚本正在解雇用american_america.UTF8覆盖它的地方。我会寻找一个.cshrc(或类似的,取决于什么是shell S2)。可能位于用户区域或/ etc全局区域。