`
hmx1388
  • 浏览: 37184 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

关于websphere未知的NullPointerException

阅读更多
项目发布在WAS5上的,采用ORACLE11G数据库,通过WAS的数据源连接,
在以下语句时出错了:PreparedStatement pstmt = conn.prepareStatement(sql);
出错信息是:
java.lang.NullPointerException
        at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
        at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
        at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)



看上去像是数据库驱动的问题,于是就挨个换驱动。

但是还是不行……

程序上也莫名其妙,看不出问题。

网上有这种解决方法:(http://www.blogjava.net/Unmi/archive/2007/04/21/124160.html)



Hibernate程序使用WAS连接池提交事务时出现 NullPointerException
Hibernate应用程序部署到WebSphere Application Server 5.1上,使用WAS的连接池,程序在处理了比较多的 session.save(object)操作之后,在执行提交事物 trans.commit()之时出现以下异常

java.lang.NullPointerException
        at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
        at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
        at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
        at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:218)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2220)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
        at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:52)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:28)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)

因为开发用的是Tomcat应用服务器,配置的Tomcat连接池,所以在本地跑怎么操作都不会有这种错误,费了好一翻工夫也没能定位,查错中总是受 java.lang.NullPointerException 的影响,一遍一遍地审视代码,会是哪个变量没有初始化呢?

自我折磨了好一阵子,无奈之时去网上Google一把(其实早该这么做的,也就因为怀疑问题出在自己写的代码),才发现原来别人也遇到过类似的问题, Hibernate的官方论坛也有这种讨论.

http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&q=+oracle.jdbc.dbaccess.DBDataSetImpl.clearItem&meta=

网上有说是驱动的问题,有说是Hibernate数据库方言的问题,也有说最大缓存语句的问题

1. Delete Object error http://forum.hibernate.org/viewtopic.php?t=934050
   其中提到的有换 Oracle 数据库驱动, 有人试着换成 ojdcbc14.jar 解决,最后有人说到设置 c3p0 的hibernate.c3p0.max_statements  为 0 就行

2. NullPointerException on transaction.commit() http://forum.hibernate.org/viewtopic.php?t=973414&sid=04bbd1a8951b3051c52e374a7888d35e
   回贴中说是把 org.hibernate.dialect.OracleDialect 换成 org.hibernate.dialect.Oracle9Dialect, 但有人采取这种做法无效,何况我用的还是 8.0.5 的Oracle,I 都不带.

3. WAS 6上DataSource的问题 http://www.itpub.net/743938.html
   这篇贴主就直接撇名了把Data Source的Command Cache只能设为0,一旦大于0就报以上错误,看来这是一个比较明确的解决办法。于是我就在WAS的控制台下把我所用连接池的语句高速缓存大小 设置为 0 ,然后重启WAS,问题得到解决。就是不知道不缓存 Statement 对性能会产生怎么样的影响,须进一步了解一下。

   我也试过换数据库驱动的办法,把原有的驱动换成在我本地可用的class12.jar包,没有效果。又换成ojdbc.jar包试试,还是没用。

    总结出现以上错误的解决办法,设置WAS的数据源属性的 Command Cache(也就是语句高速缓存大小)为0, 如果用的别的连接池产品,要设置相应的 max_statements 为 0,属性名具体参考对应连接池产品。

    注意,改了WAS的数据源设置需要重启WAS的。


直接试了第3种方式,事实证明是有效果的。

咨询了客服,说这个“语句高速缓存大小”是指同时运行的sql语句及语句长度的限制。

设为0则是不限制。

说是,如果服务器性能比较好,用户不是特别多的话,可以这样设。





分享到:
评论

相关推荐

    关于 WebSphere 的应用部署

    在本文中,我们将深入探讨关于 WebSphere 应用部署的相关知识点,包括服务管理、应用安装与部署以及一些实用操作技巧。 首先,我们要了解如何管理 WebSphere 服务。在 Linux 环境下,可以通过 SSH 登录服务器并执行...

    关于websphere安装和卸载文档

    【标题】:WebSphere安装与卸载指南 【正文】: WebSphere是IBM推出的一款强大的企业级应用服务器,广泛应用于构建、部署和管理各种企业级应用程序。本文档将深入探讨WebSphere的安装、配置、发布应用程序以及卸载...

    关于WebSphere建立jdbc数据源

    【关于WebSphere建立jdbc数据源】 在WebSphere应用服务器中,建立JDBC数据源是连接到数据库的关键步骤,它允许应用程序通过Java Database Connectivity (JDBC) API与数据库进行交互。以下是一个详细的步骤指南: 1...

    websphere 6.1 资料集

    Websphere 6.1 资料集涵盖了关于IBM的Websphere Application Server (WAS) 6.1版本的全面知识,包括安装、配置和实用操作等多个方面。Websphere是IBM提供的一个强大的企业级Java应用服务器,用于部署和管理基于Java...

    WebSphere实验报告.zip

    WebSphere是IBM开发的一款强大的企业级应用服务器,它在IT行业内扮演着至关重要的角色,尤其在企业级Java应用程序的部署和管理方面。本实验报告基于吉林大学的WebSphere课程,涵盖了八次实验的内容,旨在帮助学生...

    应用移植WebSphere问题列表(经验是买不到的)

    1. **数据库插入数据异常**:当遇到`java.lang.NullPointerException`错误,特别是在Oracle JDBC操作中,可能是由于数据源配置或连接池设置不当导致的。解决方案是将连接池的语句高速缓存大小设置为0,这有助于防止...

    Websphere8.5安装

    【标题】:Websphere 8.5安装 在IT领域,WebSphere是IBM提供的一款企业级应用服务器,常用于构建、部署和管理各种企业应用程序。本文将详细讲解WebSphere 8.5的安装过程,包括IBM Installation Manager的安装、...

    websphere

    ### WebSphere设计与LDAP集成深度解析 #### 一、引言:目录服务与WebSphere的关系 WebSphere作为IBM的一款企业级应用服务器,提供了强大的中间件功能,包括事务处理、消息传递、安全性和集群管理等,旨在帮助企业...

    WebSphere如何打补丁

    ### WebSphere如何打补丁 #### 一、概述 在IT行业中,中间件如IBM WebSphere Application Server (WAS)的稳定性和安全性至关重要。为了确保系统能够正常运行并避免潜在的安全漏洞,定期更新和打补丁是必不可少的...

    IBM WebSphere MQ 安装包

    【IBM WebSphere MQ安装包详解】 IBM WebSphere MQ,前身为IBM MQSeries,是IBM公司推出的一款企业级的消息中间件产品。它在信息技术领域扮演着至关重要的角色,为跨网络、操作系统和应用程序提供了高效、安全的...

    WEBSPHERE乱码问题的解决和处理

    /opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/AppServer/lib:/opt/IBM/WebSphere/AppServer/installedChannels:/opt/IBM/WebSphere/AppServer/lib/ext:/opt/IBM/WebSphere/AppServer/web/help:/opt/IBM...

    linux下WebSphere启动停止

    "Linux下WebSphere启动停止" Linux操作系统下WebSphere服务器的启动和停止是非常重要的操作,因为这直接关系到WebSphere服务器的使用和维护。下面将详细介绍Linux下WebSphere启动停止的过程。 一、WebSphere服务器...

    在Linux服务器上每周自动重启WebSphere服务配置

    ### 在Linux服务器上每周自动重启WebSphere服务配置 #### 知识点概述 本文档将详细介绍如何在Linux环境中设置cron任务来实现WebSphere服务的自动重启。此方法不仅适用于WebSphere服务,还可广泛应用于需要定时执行...

    在WebSphere发布CXF注意事项

    在WebSphere上部署CXF(CXF全称为Apache CXF,是一个开源的Java服务框架)时,可能会遇到一系列挑战。本文将深入探讨这些常见问题及其解决方案,帮助你顺利地在WebSphere应用程序服务器上运行CXF服务。 首先,理解...

    WebSphere入门教程大合集

    WebSphere是IBM推出的一款强大的企业级应用服务器,广泛用于构建、部署和管理Java应用程序和Web服务。本合集中的入门教程旨在帮助初学者快速掌握WebSphere的基础知识和操作技巧,以便在实际工作中灵活运用。 一、...

    websphere中文入门教程

    3. "E书说明.txt" - 这个文本文件可能包含关于如何使用提供的电子书(E书)的指南,例如阅读设备要求、阅读软件安装步骤等。 总之,Websphere中文入门教程是一个全面的学习资源,涵盖了Websphere应用服务器的基础...

    websphere常用目录

    在深入探讨WebSphere中几个关键目录的作用及其重要性之前,我们先简要了解下WebSphere应用服务器。IBM WebSphere Application Server(简称WebSphere)是一种基于Java的企业级应用程序服务器,广泛应用于构建、部署...

    websphere commerce的使用即websphere commerce图解.pdf

    ### WebSphere Commerce 使用与定制详解 #### 一、引言 在本文档中,我们将详细介绍如何使用 IBM WebSphere Commerce 平台以及...通过参考以上资源,您可以获取更多关于 WebSphere Commerce 的详细信息和技术支持。

    WebSphere

    WebSphere是IBM提供的一款强大的企业级应用程序服务器,它在IT行业中扮演着至关重要的角色,尤其在构建、部署和管理企业级Web应用程序方面。WebSphere作为IBM的中间件产品,是其软件栈的核心部分,旨在帮助企业实现...

Global site tag (gtag.js) - Google Analytics