文档章节

WebLogic JNDI 查询Clob值失败 (Mybatis+Spring+SpringMVC)

 中国租女友网
发布于 2014/06/18 15:50
字数 698
阅读 211
收藏 0

项目开始使用的数据源是:com.mchange.v2.c3p0.ComboPooledDataSource

后来部署到WebLogic服务器上、把数据源变成了:WebLogic的JNDI

出现问题类转换异常:weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 转换 oracle.sql.CLOB 失败

是因为Mybatis使用clob字段时、需要重写TypeHandler接口 实现clob转换


而weblogic有自带的CLOB字段、发生类转换异常


解决办法:下载weblogic包、保留jdbc类、引用到项目lib目录。(成功解决问题)


例子:http://hussion.iteye.com/blog/1530696

package utils;

import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import oracle.sql.CLOB;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class OracleClobTypeHandler implements TypeHandler<Object> {


    @Override
    public Object getResult(ResultSet arg0, String arg1) throws SQLException {
        Clob clob = (Clob)arg0.getClob(arg1);
        
        return (clob == null || clob.length() == 0) ? null : clob.getSubString(
                (long) 1, (int) clob.length());
    }


    @Override
    public Object getResult(CallableStatement arg0, int arg1)
            throws SQLException {
        return null;
    }

    @Override
    public void setParameter(PreparedStatement arg0, int arg1, Object arg2,JdbcType arg3) throws SQLException {
        
        weblogic.jdbc.rmi.internal.Clob clob = (weblogic.jdbc.rmi.internal.Clob) CLOB.empty_lob();
        clob.setString(1, (String) arg2);
        
        arg0.setClob(arg1, clob);
    }
}


========================================================================================================
引用参考:http://www.blogjava.net/SpartaYew/archive/2011/05/18/350480.html

目前,笔者见到的有三种处理CLOB型ResultSet的方法:
1、Java原生ResultSet,通常的代码为:  oracle.sql.CLOB clob = ((OracleResultSet) rss).getCLOB(1);
2、Tomcat处理CLOB型ResultSet:须将lib下的classes12.jar(oracle包)删除,但程序不需要改动。
3、通过Weblogic的DataSource获得的连接池,可采用如下代码:
   weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob)rss.getClob(1);
   当然,要获得weblogic.jdbc.vendor.oracle.OracleThinClob接口还必须将D:\bea812\weblogic81\server\lib下的weblogic.jar
   拷贝到项目的E:\eclipse3.4.2\workspace\sykf\webapp\WEB-INF\lib下,才能正常使用。

鉴于本项目使用Weblogic做应用服务器,并且需要充分利用Weblogic的连接池建立的数据库连接,因此,笔者采用第三种方式来解决这个问题,也就是说将
D:\bea812\weblogic81\server\lib下的weblogic.jar拷贝到项目的E:\eclipse3.4.2\workspace\sykf\webapp\WEB-INF\lib下。

四、先为weblogic.jar减减肥吧

   要知道,从D:\bea812\weblogic81\server\lib下的weblogic.jar获得的该jar容量是非常大的,达36M之多, 这么大的jar包放到项目lib下有些笨拙,这个不要紧,可以对之进行减肥,将里面不需要的包删除掉就可以了,具体步骤如下:
  1)、解压该jar包,成为一个文件夹。
  2)、将里面除jdbc之外的包全部删除。
  3)、重新压缩成jar包。

  笔者通过上述处理之后,成功将36M体积的Weblogic.jar减肥为713K。

  在这里可能有读者会有如下疑问:
 
  你的lib下有weblogic.jar包,并且Weblogic下也有weblogic.jar包,并且两个jar中包含的jdbc.vendor.oracle.OracleThinclob相同,两者不会冲突吗?
  这个不必担心,因为包名类名虽然都相同,即使jvm也没法区分,那JVM在处理时就只有第一个包被引入(在classpath路径下排在前面的包),
  第二个包会在classloader加载类时判断重复而忽略。

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 8
码字总数 1223
作品 0
佛山
WebLogic时区与系统不一致的调整方式

我使用的WebLogic版本为9,运行环境为Windows7,WebLogic启动后发现控制台以及项目日志中的时间与实际系统的时间相差8小时,控制台显示的时区为GMT,于是考虑调整WebLogic的时区,查询WebLo...

benbenming
2011/07/12
0
0
weblogic10_windows下优化配置实例

优化说明: 一、Weblogic服务程序设置: 1、设置JDK内存: 修改weblogicuserprojectsdomainsbasedomainbin下的setDomainEnv.cmd文件: 修改前: if"%JAVA_VENDOR%"=="Sun" ( set WLSMEMARGS_...

jeffsui
2014/02/11
0
0
weblogic debug配置

1.1. 软件环境 Eclipse 3.1 Weblogic 8.1 1.2. 工作原理 远程调试就是允许利用 java tools 里面的jdb 程序连接远程的JAVA虚拟机,进行远程debug ,同时远程的虚拟机启动时候需要开启 debug ...

ianLi
2012/11/02
0
0
weblogic DataSource 配置注意事项 .

weblogic 创建datasource时,配置注意事项,记录一下weblogic 的doc。 事务选项 使用管理控制台配置 JDBC 数据源时,WebLogic Server 会根据 JDBC 驱动程序的类型自动选择特定的事务选项: ...

pczhangtl
2013/11/22
0
0
关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题

在部署微信公众号项目时,在本地TOMCAT测试通过后部署到WEBLOGIC上。抛出了weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection这样的错误。这段...

哥本哈根的小哥
05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搬瓦工最新国内可访问镜像网址:bwh8.net

昨天搬瓦工之前的国内备用镜像网址bwh1.net被域名污染了,在国内打不开了。搬瓦工发布了最新的国内可访问的镜像地址:bwh8.net。 消息来源:搬瓦工优惠网->搬瓦工最新国内可访问镜像网址:b...

flyzy2005
38分钟前
0
0
大数据学习之-NN,SNN和DN的作用

NameNode(名称节点,简称NN)作用: 文件系统命名空间,维护文件系统目录树 存储文件名称, 文件目录结构, 文件属性(权限,大小,创建时间,副本数及大小....), 文件对应的数据块及这些块所...

hnairdb
42分钟前
1
0
TypeScript基础入门之声明合并(三)

转发 TypeScript基础入门之声明合并(三) 声明合并 将命名空间与类,函数和枚举合并 命名空间足够灵活,也可以与其他类型的声明合并。 为此,命名空间声明必须遵循它将与之合并的声明。 生成的...

durban
49分钟前
0
0
webSocket前台实现

webSocket前台实现 简单实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="application/javascript" src="js/base64.js"></script......

Airship
今天
1
0
从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

zoom(zoom.us) 是一款受到广泛使用的在线会议软件。相信各位一定在办公、会议、聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板、...

七牛云
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部