在weblogic安装应用后报异常 'java.lang.NoClassDefFoundError: oracle/dms/http/Request' 处理方法...

本文详细介绍了如何解决WebLogic部署应用时出现的NoClassDefFoundError错误,原因是节点管理器中的JAR包未被重新加载。通过更新nodemanager.properties文件并设置StartScriptEnables=true,确保在运行节点管理器前加载必要的JAR包。同时,建议运行setNMProps脚本,重启节点管理器服务,重新启动ADF管理服务器,并确认部署已成功。确保部署目标正确配置于Admin Server和ADF Managed Server。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.oracle.com/webfolder/technetwork/jdeveloper/howto/11114/managedserver/wlsadfms.html

使用以上官方文档安装后,直接安装应用会出现以下错误

<Error> <Deployer> <UNIBRAU> <adfserver1> <[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <4434b55da0f9041e:755c3f1:12f4a4c22dd:-8000-0000000000000b3d> <1302639266661> <BEA-149265> <Failure occurred in the execution of deployment request with ID '1302639261332' for task 'weblogic.deploy.configChangeTask.1'. Error is: 'java.lang.NoClassDefFoundError: oracle/dms/http/Request'
java.lang.NoClassDefFoundError: oracle/dms/http/Request
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
at java.lang.Class.getDeclaredFields(Class.java:1743)

其实原因就是节点管理器中的JAR包没有被重新加载

有人用这种方法解决了

So far, I have resolved the above error buy updating nodemanager.properties file

I have set the StartScriptEnables=true

This will load the StartWeblogic.cmd file before running node manager (i believe) so necessary jars are loaded and after that if you apply JRF template, it works fine.

还有人建议以下方法

1) Run setNMProps script

For Windows installations: <MW_HOME>\oracle_common\common\bin\setNMProps.cmd
For Linux/Unix installations: <MW_HOME>/oracle_common/common/bin/setNMProps.sh


2) Restart the NodeManager process

For Windows installations: Stop and start the NodeManager Windows Service
For Linux/Unix installations: Stop nodemanager process by killing it and restart it with <MW_HOME>/wlserver_10.3/server/bin/startNodeManager.sh script

3) Restart the ADF Managed Server and verify that the same error is no longer reported .

4) Confirm in Admin Console that the DMS application is targeted to both the AdminServer and the ADF "Managed Server".

From Admin Console:
- Click in the Deployments section in the left panel
- Locate the application "DMS Application(11.1.1.1.0)" and validate its status is "Active"
- Click on the link in the application name "DMS Application(11.1.1.1.0)", and navigate to the "Targets"
- Verify that both AdminServer and the ADF "Managed Server" are listed

5) Start DMS application if not already started then access http://<host>:<managed server port>/dms/ and confirm dms application is working as expected.

`java.lang.NoClassDefFoundError: org/glassfish/jersey/servlet/webcomponent$5` 错误通常表明 WebLogic 服务器在运行时无法找到所需的 Jersey 库类。该问题的根本原因可能涉及类加载器的优先级配置不当、依赖库版本冲突或缺失。 ### 原因分析 1. **类加载器优先级配置不当** WebLogic 默认使用其自身的类加载器来加载应用所需的类。如果应用中自带了 Jersey 相关的 JAR 包,而 WebLogic 的系统类加载器优先加载了自己的版本,可能会导致类版本不一致或找不到特定类的问题。 2. **依赖库版本冲突** WebLogic 12c 自带了一些 Jersey 模块(如 Jersey 1.x 或 2.x),如果应用程序部署时引入了不同版本的 Jersey(例如通过 Maven 或手动添加 JAR 文件),就可能出现版本冲突,导致某些类无法正确加载。 3. **缺少必要的 JAR 文件** 如果项目中遗漏了 `jersey-servlet` 或其他相关模块的 JAR 文件,则在运行时会抛出 `NoClassDefFoundError`。 --- ### 解决方案 #### 1. 配置类加载器优先级 可以通过修改 `weblogic.xml` 文件,设置类加载器优先加载应用中的类而不是 WebLogic 提供的类: ```xml <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> ``` 此配置将确保应用优先使用 `WEB-INF/lib` 下的类库,从而避免与 WebLogic 自带的 Jersey 版本发生冲突 [^1]。 #### 2. 显式指定 Jersey 版本并排除冲突依赖 检查项目的构建文件(如 `pom.xml`)并确保只包含一个版本的 Jersey 依赖。例如,若希望使用 Jersey 2.x: ```xml <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.35</version> </dependency> ``` 同时,应排除 WebLogic 可能加载的旧版本 Jersey 模块: ```xml <container-descriptor> <prefer-application-packages> <package-name>javax.ws.rs.*</package-name> <package-name>org.glassfish.jersey.*</package-name> </prefer-application-packages> </container-descriptor> ``` 这样可以确保 WebLogic 使用应用提供的 Jersey 实现 [^1]。 #### 3. 手动验证和部署依赖 JAR 确保所有必需的 Jersey JAR 文件(如 `jersey-servlet.jar`)都已放置在应用的 `WEB-INF/lib` 目录中,并且没有被意外删除或遗漏。 #### 4. 升级或补丁 WebLogic 如果使用的是较旧的 WebLogic 12c 版本,建议升级到最新补丁版本,以支持更现代的 Jersey 版本并修复潜在的类加载问题。 --- ### 示例代码:Jersey 资源类 为了确保 Jersey 正确运行,以下是一个简单的资源类示例: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "Hello, Jersey!"; } } ``` 此外,确保 `web.xml` 中配置了 Jersey 的 Servlet: ```xml <servlet> <servlet-name>JerseyServlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.example.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JerseyServlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值