JBoss模块很糟糕,无法在JBoss 7下使用自定义Resteasy / JAX-RS

由于JBoss EAP 6.1 / AS 7.2.0是模块化的,并且您可以排除Web应用程序可见的模块,因此您希望可以轻松地忽略内置的JAX-RS实现(Rest Easy 2.3.6)并使用它。自定义的(3.0.6)。 但是,可悲的是,事实并非如此。 您必须遵守官方指南的建议,即在全球范围内升级Rest Easy –前提是服务器上运行的其他Web应用程序均不会因升级而中断。

这应该足以排除内置的Rest Easy,并能够使用webapp中包含的版本:

<!-- jboss-deployment-structure.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure><deployment><exclude-subsystems><subsystem name="resteasy"/></exclude-subsystems></deployment></jboss-deployment-structure>

但是,它远没有奏效。 这几乎可以完成工作(尽管其中的少数排除可能是不必要的):

<!-- jboss-deployment-structure.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure><deployment><exclude-subsystems><subsystem name="resteasy"/></exclude-subsystems><exclusions><module name="org.apache.log4j" /><module name="org.apache.commons.logging"/><module name="org.jboss.as.jaxrs"/><module name="org.jboss.resteasy.resteasy-jaxrs"/><module name="org.jboss.resteasy.resteasy-cdi"/><module name="org.jboss.resteasy.jackson-provider"/><module name="org.jboss.resteasy.resteasy-atom-provider"/><module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/><module name="org.jboss.resteasy.resteasy-jaxb-provider"/><module name="org.jboss.resteasy.resteasy-jettison-provider"/><module name="org.jboss.resteasy.resteasy-jsapi"/><module name="org.jboss.resteasy.resteasy-multipart-provider"/><module name="org.jboss.resteasy.resteasy-yaml-provider"/><module name="org.codehaus.jackson.jackson-core-asl"/><module name="org.codehaus.jackson.jackson-jaxrs"/><module name="org.codehaus.jackson.jackson-mapper-asl"/><module name="org.codehaus.jackson.jackson-xc"/><module name="org.codehaus.jettison"/><module name="javax.ws.rs.api"/></exclusions></deployment></jboss-deployment-structure>

但是,只有近。 问题是排除javax.ws.rs.api无效。 似乎不能排除核心Java EE API。 死路。

顺便说一句,这是我最后与jax-rs相关的依赖项:

// resteasyVersion = '3.0.6.Final'
compile group: 'org.jboss.resteasy', name: 'jaxrs-api', version: resteasyVersion
compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: resteasyVersion
compile group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider', version: resteasyVersion // JSONP
compile group: 'org.jboss.resteasy', name: 'async-http-servlet-3.0', version: resteasyVersion // Required at runtime
compile group: 'org.jboss.resteasy', name: 'resteasy-servlet-initializer', version: resteasyVersion // Required at runtime

失败尝试的大概历史

我不再记得我经历过的所有死胡同,但是这里是我在部署或运行​​时遇到的异常的大致概述。

java.lang.ClassNotFoundException: org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher

–通过将org.jboss.resteasy:async-http-servlet-3.0:3.0.6.Final到依赖项进行org.jboss.resteasy:async-http-servlet-3.0:3.0.6.Final

java.lang.ClassCastException: myapp.rs.RestApplication cannot be cast to javax.servlet.Servlet

–通过将org.jboss.resteasy:resteasy-servlet-initializer:3.0.6.Final到依赖项进行org.jboss.resteasy:resteasy-servlet-initializer:3.0.6.Final

java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V

–通过将更多的RestEasy / Jackson模块添加到排除列表中可能修复

java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap;

–这是无法解决的最终问题; 问题是, BuiltResponseresteasy-jaxrs从继承javax.ws.rs.core.Response不过的版本从这个类JAXRS-API 3.0.6.Final.jar是有利于忽略Response从JAX-RS 1.1 javax.ws.rs.api模块( /jboss-eap-6.1.0/modules/system/layers/base/javax/ws/rs/api/main/jboss-jaxrs-api_1.1_spec-1.0.1.Final-redhat-2.jar ),它缺少getHeaders方法,并且如上所述,不能将其排除。 (感谢allprog暗示了这一冲突 !)

结论

使用较新的JAX-RS的唯一方法是升级JBoss模块。 如果那会破坏其他Web应用程序,那么您将陷入困境。

经验教训:具有大量现成的,集成良好的功能(?)的应用程序服务器似乎很有吸引力,但是当您遇到冲突的库和类加载问题时,它们的价值会Swift下降。 从长远来看,从您完全控制的简单事物(例如Jettty)开始,也许是一个更好的解决方案。 另外,在同一台服务器上运行多个Web应用程序在2000年也许很聪明,但如今已不值得一试。 我们拥有足够的磁盘空间和内存,因此库的重用并不重要,并且能够在一处管理所有应用程序的全局设置的能力当然是更好的选择。 微服务FTW!

参考: JBoss模块很烂 ,在The Holy Java博客上,无法使用JCG合作伙伴 Jakub Holy的JBoss 7下的Custom Resteasy / JAX-RS 。

翻译自: https://www.javacodegeeks.com/2014/02/jboss-modules-suck-its-impossible-to-use-custom-resteasyjax-rs-under-jboss-7.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible-----条件判断与错误处理

when 在ansible中&#xff0c;条件判断的关键词是when --- - hosts: allremote_user: roottasks:- debug:msg: "System release is centos"when: ansible_distribution "CentOS"ansible_distribution就是facts信息中的一个key&#xff0c;之前如果我们需要…

Ansible 运维自动化 ( 配置管理工具 )

一、关于AnsibleAnsible是一个自动化部署工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说&#xff0c;只要管理员通过ssh登录到一台远程主机上能做的操作&#xff0c;Ansible都可以做到。Ansible是python开发的,故依赖一些python库和组件,如:paramiko&…

分解 python_面试官:如何用Python实现将一个整数分解成质因数?

概述今天主要分享一个关于分解质因数的实例&#xff0c;判断的逻辑稍微多了点&#xff0c;一起来看看吧~需求将一个整数分解质因数。例如&#xff1a;输入90,打印出90233*5思路其实根本不需要判断是否是质数&#xff0c;从2开始向数本身遍历&#xff0c;能整除的肯定是最小的质…

题解 P5259【欧稳欧再次学车】

实际上没什么可说的&#xff0c;暴力大模拟就好。 一定要开long long&#xff01; 一定要开long long&#xff01; 一定要开long long&#xff01; &#xff08;不然会炸数据的&#xff01;&#xff01;&#xff01;&#xff09; //Stand up for the faith! #include<bits/s…

如何:在Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中测试依赖项

对于当今的大多数Java项目&#xff0c;JUnit本身还远远不够。 您还需要一个模拟库&#xff0c;也许还有其他东西。 在此迷你操作指南中&#xff0c;我介绍了可以在新的Java项目中开始的测试依赖项。 一切都始于JUnit Maven存储库中的junit组中有两个工件&#xff1a; junit和j…

elementUI vue 编辑中的input的验证残留清除

当使用编辑的时候, 假如上次的验证没通过, 报红了, 下次再点击编辑的时候还会报红,因此要清除验证残留, 方式有两种: this.$refs["from"].resetFields(); //移除校验结果并重置字段值this.$refs["from"].clearValidate(); //移除校验结果 更多专业前端知识…

Kali学习笔记25:Arachni使用(实现分布式扫描)

文章的格式也许不是很好看&#xff0c;也没有什么合理的顺序 完全是想到什么写一些什么&#xff0c;但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习&#xff0c;大牛和杠精们请绕道 Arachni不同于上次介绍的nikto和skipfish 是一个Web界面的一个Web扫描器 Arachni的强大不…

红帽正式宣布发布JBoss BPM Suite 6和JBoss BRMS 6

红帽公司刚刚宣布了这些期待已久的产品的全面上市 &#xff01; 要花费大量精力将社区代码转变为企业质量的软件&#xff0c;客户和最终用户可以在Red Hat支持的生产环境中使用这些代码。 现在是现在和潜在客户学习该产品&#xff0c;让合作伙伴开始使用它并学习基本知识&…

三星sd卡无法删除数据_单反相机里的SD卡在电脑中突然无法识别提示要格式化怎么办?...

大家在这个国庆佳节出去游玩都拍了不少精彩照片吧&#xff0c;昨天就有微信好友求助&#xff0c;说刚刚从外面游玩回到家里&#xff0c;准备把单反相机里64G存储SD卡中的照片用读卡器复制到电脑里&#xff0c;插入电脑后就提示如下图&#xff1a;在电脑中只显示“可移动磁盘”&…

CF1080F Katya and Segments Sets

题目链接&#xff1a;洛谷 题目描述&#xff1a;【看翻译】 这种强制在线的方法可真是奇妙。 主席树可真是奇妙。 我们用主席树的版本维护$x\leq l$的限制&#xff0c;用线段树维护$[a,b]$的限制&#xff0c;用节点的值来维护$r\leq y$的限制。 详细地说&#xff0c;就是先将线…

在微信小程序上,帮助中心界面实现类似手风琴案例

小程序wxml代码如下: <block wx:for"{{arrdata}}" wx:key""><view class"centent_title" tap"open_that" data-index"{{index}}"><view class"title" >{{item.name}}?</view><image…

python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...

面试官&#xff1a;如让线程顺序执行&#xff1f;我&#xff1a;使用Thread的join方法。面试官&#xff1a;除了join还有别的办法吗&#xff1f;我&#xff1a;目前只用过join。面试官&#xff1a;哦&#xff0c;那你了解CountDownLatch吗&#xff1f;我&#xff1a;不了解&…

计算斐波那契数列

O(n)复杂度方法O(logn)复杂度方法计算矩阵的n次方&#xff0c;可以先求矩阵的n/2次方&#xff0c;然后再平方即可。 1 #include <cassert>2 3 struct Matrix2By24 {5 Matrix2By26 (7 long long m00 0,8 long long m01 0,9 long long m…

使用ANTLR4,用于代码镜像和基于Web的DSL的Primefaces扩展

DSL是很酷的东西&#xff0c;但是我不清楚它们有什么用。 然后我意识到它们对以下方面有好处&#xff1a; 摆脱复杂的UI 意思是 更快的做事方式 而已。 当我阅读此博客时&#xff0c;我得出了这个结论。 如果您的用户是技术人员&#xff0c;并且不惧怕类似SQL的语法处理方…

js 动态绑定事件 on click 完美解决绑定不成功

动态绑定坑了多少人..... //绑定 $("ol").on("click","li a",function(){ ... }) //解绑 $("ol").off("click","li a"); 完美解决动态绑定: ol 为动态生成html的父类. li a 为其动态生成的html, 绑定使用on…

连接mysql超时时间设置多少_怎么设置数据库的连接数和连接超时时间

如何设置数据库的连接数和连接超时时间连接数的话可以修改spfile文件来约束查看当前的连接数&#xff1a;select count(*) from v$process;–数据库允许的最大连接数&#xff1a;select value from v$parameter where name ‘processes’&#xff1b;–修改最大连接数&#xf…

【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-4 单一职责原则...

/** * 软件设计七大原则-单一职责原则 学习笔记 * author cnRicky * date 2018.11.10 */单一职责原则 定义&#xff1a;不要存在多于一个导致类变更的原因一个类只负责一个职责&#xff0c;如果分别有两个职责&#xff0c;那就建立两个类分别负责职责1和职责2一个类/接口/方法只…

移动架构-数据库分库和全版本升级

在项目中&#xff0c;往往涉及到数据库的版本升级&#xff0c;通常会有两种升级方式&#xff0c;一种是纯代码实现&#xff0c;一种是脚本实现&#xff0c;这里使用脚本升级&#xff0c;这样的升级方式更便于维护 思路 全版本升级&#xff0c;重点在于数据的迁移&#xff0c;这…

Java中的硬件事务性内存,或者为什么同步将再次变得很棒

总览 硬件事务内存有潜力允许多个线程同时以推测方式访问相同的数据结构&#xff0c;并使缓存一致性协议确定是否发生冲突。 HTM旨在为您提供细粒度锁定的可伸缩性&#xff0c;粗粒度锁定的简单性以及几乎没有锁定的性能。 如果JVM支持&#xff0c;则您的程序或库是使用过程粒度…

mysql5.7乱码_mysql5.7中解决中文乱码的问题

在使用mysql5.7时&#xff0c;会发现通过web端向数据库中写入中文后会出现乱码&#xff0c;但是在数据库中直接操作SQL语句插入数据后中文就显示正常&#xff0c;这个问题怎么解决呢&#xff1f;此处不对mysql的数据编码过程和原理进行讲解&#xff0c;如果有兴趣的同学可以自己…