spring+hibernate工程使用JNDI连接部署至websphere,报错Caused by: java.lang.ClassNotFoundException: oracle.sql.BLO

spring+hibernate工程使用JNDI连接部署至websphere,保存oracle大字段报错Caused by: java.lang.ClassNotFoundException: oracle.sql.BLO。

org.springframework.dao.InvalidDataAccessApiUsageException: Couldn't initialize OracleLobHandler because Oracle driver classes are not available. Note that OracleLobHandler requires Oracle JDBC driver 9i or higher!; nested exception is java.lang.ClassNotFoundException: oracle.sql.BLOB

原文链接地址:http://windring.iteye.com/blog/108171

参考资料:http://my.oschina.net/u/218421/blog/38576

正文引用:

在spring里 插入 BLOB字段
kp.setContent(content.getBytes()); 
方法 :hibernate saveOrUpdate


Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB。
       使用tomcat 没问题。
       可服务器改为 WebSphere .就报错。

把Spring内置提供的NativeJdbcExtractor转换器 改了一下,结果:问题解决。
———————————————————————————————————————————————————————
总结如下:
      1、对于我们的工程:
           在发布环境中,要将nativeJdbcExtractor  换成             org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor
留意log4j日志,此时的blob字段的java类型为oracle.sql.Blob
      2、Spring内置提供的NativeJdbcExtractor转换器有:
          C3P0NativeJdbcExtractor
          CommonsDbcpNativeJdbcExtractor
          JBossNativeJdbcExtractor
          NativeJdbcExtractor
          NativeJdbcExtractorAdapter
          SimpleNativeJdbcExtractor
          WebLogicNativeJdbcExtractor
          WebSphereNativeJdbcExtractor
          XAPoolNativeJdbcExtractor
          要根据不同服务器及时修改,以免浪费大量时间。
          位于org\springframework\jdbc\support\nativejdbc下

在此总结。

<think>好的,我现在需要解决用户在使用`org.mortbay.jetty.plus.jndi.Resource`时遇到的`java.lang.ClassNotFoundException`问题。用户提到Jetty配置文件和引用缺失的依赖,所以首先要确定这个类属于哪个JAR包,然后检查依赖是否被正确引入。 首先,回忆之前的回答中,用户配置的是Jetty 6.x版本,而`org.mortbay.jetty.plus.jndi.Resource`确实是Jetty 6中的类。现在出现类找不到的错误,可能的原因是缺少相关的Jetty JAR包或者依赖路径配置不正确。 接下来,我需要确认用户是否已经正确添加了`jetty-plus`模块。在Jetty 6中,`jetty-plus`模块提供了JNDI资源管理的支持,因此必须确保该模块的JAR文件(如`jetty-plus-6.x.x.jar`)存在于类路径中。用户之前的问题中提到需要将数据库驱动放在`JETTY_HOME/lib/ext`目录,但可能忽略了`jetty-plus`本身的JAR。 另外,用户可能没有在启动命令中包含`jetty-plus.xml`配置文件,这会导致相关类没有被加载。需要检查启动命令是否正确加载了必要的配置文件,例如`etc/jetty-plus.xml`。 还有可能用户的Jetty版本不匹配。如果用户错误地使用了更高版本的Jetty(比如Jetty 9或10),这些版本的包结构已经改变,`org.mortbay.jetty`被替换为`org.eclipse.jetty`,所以类名不同,导致找不到类。需要用户确认Jetty的版本是否确实是6.x,否则需要调整依赖或配置方式。 此外,Maven项目中如果使用依赖管理,可能需要检查pom.xml中是否声明了正确的Jetty版本和`jetty-plus`依赖。例如,在Maven中,Jetty 6的依赖可能较旧,需要手动添加。 总结下来,可能的解决方案包括: 1. 确认并添加`jetty-plus`的JAR到类路径。 2. 检查启动命令是否加载了`jetty-plus.xml`。 3. 确保Jetty版本与配置一致,避免版本冲突。 4. 检查Maven或Gradle中的依赖配置是否正确。 还需要考虑用户是否在IDE中运行,可能存在类路径配置的问题,或者构建工具没有正确打包依赖。建议用户检查项目构建路径和部署设置,确保所有必要的JAR文件都被包含。</think>针对使用Jetty 6.x时出现`java.lang.ClassNotFoundException: org.mortbay.jetty.plus.jndi.Resource`的问题,以下是系统化的解决方案: --- ### 一、依赖缺失分析 1. **核心依赖定位** `org.mortbay.jetty.plus.jndi.Resource`类属于Jetty 6.x的`jetty-plus`模块,需确保以下依赖存在: - **JAR文件**:`jetty-plus-6.1.x.jar`(版本需与Jetty核心一致) - **Maven坐标**(若使用构建工具): ```xml <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-plus</artifactId> <version>6.1.26</version> <!-- 需与Jetty版本匹配 --> </dependency> ``` --- ### 二、配置验证步骤 #### 1. 物理文件部署 - **手动部署** 将以下文件放入Jetty的类路径(如`$JETTY_HOME/lib/ext`): - `jetty-plus-6.x.x.jar` - 数据库驱动(如`mysql-connector-java-x.x.x.jar`) - **目录结构示例**: ```bash JETTY_HOME/ ├── lib/ │ └── ext/ │ ├── jetty-plus-6.1.26.jar │ └── mysql-connector-java-5.1.49.jar ``` #### 2. 启动配置修正 在启动命令中**强制加载`jetty-plus`模块**: ```bash java -jar start.jar \ etc/jetty.xml \ etc/jetty-plus.xml # 确保此配置显式加载 ``` #### 3. 版本冲突排查 - **检查Jetty版本一致性**: ```bash # 查看Jetty核心JAR版本 ls $JETTY_HOME/lib/jetty-6*.jar ``` - **常见问题**:若升级到Jetty 9.x+,包名会变为`org.eclipse.jetty`[^2],需改用新配置方式。 --- ### 三、Maven项目专项修复 若通过Maven构建,需在`pom.xml`中**显式声明Jetty 6依赖**: ```xml <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-plus</artifactId> <version>6.1.26</version> <scope>provided</scope> <!-- 假设Jetty容器已提供 --> </dependency> ``` --- ### 四、验证操作 1. **类路径检查** 通过以下命令验证类是否可访问: ```bash jar -tf jetty-plus-6.1.26.jar | grep 'jndi/Resource.class' ``` 应输出:`org/mortbay/jetty/plus/jndi/Resource.class` 2. **运行时诊断** 添加JVM参数检查类加载: ```bash java -verbose:class -jar start.jar | grep 'jetty.plus.jndi.Resource' ``` --- ### 五、典型错误场景 | 现象 | 原因 | 解决方案 | |------|------|----------| | 仅缺少`jetty-plus` | 未部署`jetty-plus-6.x.x.jar` | 放入`lib/ext`目录 | | 版本混杂(如Jetty 6 + 9混用) | 依赖冲突 | 统一所有Jetty组件版本 | | IDE中运行时报错 | 构建工具未包含依赖 | 检查Maven/Gradle依赖作用域 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值