在glassfish v3中建了一个JDBC连接“jdbc/test”,对应一个数据库连接池“test_pool”,test_pool的数据源类名称为“oracle.jdbc.pool.OracleDataSource”,资源类型为“javax.sql.DataSource”。通过以下方式,可以正常读取数据库中的数据:
Context ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/test"); 
Connection conn = ds.getConnection(); 
ResultSet rs=executeQuery("select * from tb_test");
//数据可以正常得到
...
但是当我调用存储过程的时候,就会出现致命错误:
Context ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/test"); 
Connection conn = ds.getConnection(); 
PreparedStatement proc=conn.prepareStatement("{ call PROC_TEST(?) }");
proc.setString(1,"abc");
//单步跟踪到这里是正常的,下面一句出错:
int n=proc.execute();
...Glassfish报如下错误:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x85309776, pid=6986, tid=2249964400
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode linux-x86 )
# Problematic frame:
# C  [libclntsh.so.10.1+0x327776]
#
# An error report file with more information is saved as:
# /usr/local/glassfish-3.0.1/glassfish/domains/domain1/hs_err_pid6986.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
服务器环境:
Ubuntu 10.04 LTS Linux version 2.6.32-22-generic-pae (buildd@palmer)
jdk-6u20-linux-i586
Glassfish V3.0.1
安装ORACLE客户端:oracle-xe-client_10.2.0.1-1.0_i386请问各位是否遇到过类似的问题?该如何解决?

解决方案 »

  1.   

    看下我现在写的代码,用的也是glassfish V3不过数据库是DB2
    private static final String EACH_SECURITY_PROC = "call "
            + HibernateUtil.getSchemaName()
            + ".PSTLRSV( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
                Session session = HibernateUtil.getSession();            Connection conn = session.connection();
                CallableStatement call = conn.prepareCall( EACH_SECURITY_PROC );
                call.setString( 1, procDate );
                call.setString( 2, setRunCheck );
                call.setString( 3, accountNO );
                call.setString( 4, secuCode );
                call.setString( 5, accountGrpNO );
                call.registerOutParameter( 6, java.sql.Types.DATE );
                call.registerOutParameter( 7, java.sql.Types.DECIMAL );
                call.registerOutParameter( 8, java.sql.Types.CHAR );
                call.registerOutParameter( 9, java.sql.Types.CHAR );
                call.registerOutParameter( 10, java.sql.Types.CHAR );
                call.registerOutParameter( 11, java.sql.Types.CHAR );
                call.execute();这样试试把把
    对的话记得给分哦,做人要厚道!!!
      

  2.   

    我觉得我的程序实现上和你的并没有特别不同的地方,你用了Hibernate,而我是直接用Glassfish的连接池,问题是出在execute()上,而不是前面。我怀疑是ORACLE驱动与glassfish之间哪里没有配置正常,但是却没有一点头绪。
      

  3.   

    但是你查询没出现问题啊
    ORACLE驱动与glassfish之间肯定没问题,问题应该出现在你代码上