在新环境中启动UPES程序报:
1: ---------begin to start UPES at 2011年6月3日 星期五, 15:44:23 ----------2: 2011-06-03 15:44:24,856 INFO [UPES] - <MQSeries Workflow UPES Version1.0 starting...>3: 2011-06-03 15:44:24,858 INFO [UPES] - <----------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!----------------->4: 2011-06-03 15:44:24,858 INFO [UPES] - <正在初始化数据库及MQ连接...>5: 2011-06-03 15:44:24,986 INFO [UPES] - < Loading Database Driver: oracle.jdbc.driver.OracleDriver>6: 2011-06-03 15:44:25,009 INFO [UPES] - < Connecting to the Database '@ip地址:1521:oradb1' using UserID 'ccas'>7: 2011-06-03 15:44:26,030 INFO [UPES] - <connection =oracle.jdbc.driver.T2CConnection@1c99159>8: 2011-06-03 15:44:26,031 INFO [UPES] - < Connecting to MQSeries Queue Manager 'CCASWFQM'>9: 2011-06-03 15:44:26,102 INFO [UPES] - < Accessing inQueueManager 'CCASWFQM'>10: Pid 19617 in trap loop, signal 1111: ./startUPES.sh[28]: 19617 Memory fault(coredump)
第10,11行报错。
通过网上查询,signal 11 为 SIGSEGV 即segmentation violation,程序代码试图访问非本进程的内存空间。java程序报此错误大多数情况下是调用native code
时出现。查看UPES源码未发现调用native code的地方,只有使用oracle jdbc驱动的时候使用的oci方式,在此才会调用native code。将oci驱动方式改为thin driver,
重新启动UPES,程序正常启动。
看来是oci驱动的原因或者是当前环境未配置oracle client。
关于此类问题另外的原因说明,可以参考:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4794360