文档章节

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

 中国租女友网
发布于 2014/06/18 15:50
字数 698
阅读 216
收藏 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
佛山
私信 提问
centos安装weblogic,启动报错

我在虚拟机的centos上安装了weblogic,并新建的域,都成功了,但启动的时候有报错。我的weblogic版本是10.3.5 ,jdk是1.7. 哪位大神遇到过,求解答!!! JAVA Memory arguments: -Xms512m -X...

YesI_Du
2016/06/22
311
1
安装weblogic不同版本对JDK和Spring的支持度

现在很多人在使用SSH架构(Spring, Struts, Hibernate)开发, Tomcat 上开发完了, 认为往WebLogic上一放, 就可以正常的运行. 然而实际情况并非这么简单. 首先是JDK支持问题, Tomcat 5.0 开始都...

linuxprobe16
11/29
0
0
weblogic10_windows下优化配置实例

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

jeffsui
2014/02/11
0
0
WebLogic时区与系统不一致的调整方式

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

benbenming
2011/07/12
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

没有更多内容

加载失败,请刷新页面

加载更多

GROUP BY GROUPING SETS

GROUPING SETS 子句是 SELECT 语句的 GROUP BY 子句的扩展。通过 GROUPING SETS 子句,您可采用多种方式对结果分组,而不必使用多个 SELECT 语句来实现这一目的。这就意味着,能够减少响应时...

hblt-j
11分钟前
0
0
selenium之表格的定位

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error 目录 被测试网页的HTML代码 1.遍历表格所有单元格 2.定位表格中的某个元素 3.定位表格中的子元素 总结 浏览器网页常常会包含各类表...

程序猿拿Q
16分钟前
0
0
adb命令启动展讯平台工厂模式

adb命令启动展讯工厂模式: adb shell am start com.sprd.engineermode/com.sprd.engineermode.EngineerModeActivity...

东街小霸王
17分钟前
0
0
mtu值怎样设置才网速最快

一、什么是 MTU 值 1 从字面上来说,MTU 是英文 Maximum Transmission Unit 的缩写,即最大传输单元,它的单位是字节。 在我们常用的以太网中,MTU 一般是 1500,而无线路由器默认一般是 14...

Clarence_D
35分钟前
1
0
McAfee阻止邮件发送功能

自己写的邮件发送功能,在本地机器上可以发送,但是放到服务器上面之后就不能发送了,捕获到的异常是“以一个访问权限不允许的方式做了一个访问套接字的尝试”,找了很久,终于发现是被McAfe...

壹峰
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部